在SQL Server 2008 R2上,我想为另一列的每个不同值选择一列的值。
e.g。
name id_num
Tom 53
Tom 60
Tom 27
Jane 16
Jane 16
Bill 97
Bill 83
我需要为每个不同的名称获取一个id_num,例如
name id_num
Tom 27
Jane 16
Bill 97
对于每个名称,只要与名称相关联,就可以随机选取id_num(不要求为max或min)。
例如,对比尔来说,我可以拿到97或83.任何一个都可以。
我知道如何编写SQL查询。
由于
答案 0 :(得分:2)
SELECT
name,MIN(id_num)
FROM YourTable
GROUP BY name
<强>更新强> 如果你想随机选择id_num,你可以尝试这个
WITH cte AS (
SELECT
name, id_num,rn = ROW_NUMBER() OVER (PARTITION BY name ORDER BY newid())
FROM YourTable
)
SELECT *
FROM cte
WHERE rn = 1
答案 1 :(得分:1)
您可以像这样获取最大ID:
SELECT name, MAX(id_num)
FROM tablename
GROUP BY name
这会为每个不同的名称提供一个id。
答案 2 :(得分:1)
选择名称,最大值(id_num) 来自[mytable] 按名称分组
答案 3 :(得分:1)
cte中的(SELECT 1)并不真正对每个分区中的数据进行排序。哪个应该给你随机选择。
CREATE TABLE #tmp
(
name VARCHAR(10)
, id_num INT
)
INSERT INTO #tmp
SELECT 'Tom', 53 UNION ALL
SELECT 'Tom', 60 UNION ALL
SELECT 'Tom', 27 UNION ALL
SELECT 'Jane', 16 UNION ALL
SELECT 'Jane', 16 UNION ALL
SELECT 'Bill', 97 UNION ALL
SELECT 'Bill', 83
;WITH CTE AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY name ORDER BY (SELECT 1)) AS ID
, name
, id_num
FROM #tmp
)
SELECT *
FROM CTE
WHERE ID = 1