[英]SQL server 2008 R2, select one value of a column for each distinct value of another column
On SQL server 2008 R2, I would like to select one value of a column for each distinct value of another column. 在SQL Server 2008 R2上,我想为另一列的每个不同值选择一列的一个值。
eg 例如
name id_num
Tom 53
Tom 60
Tom 27
Jane 16
Jane 16
Bill 97
Bill 83
I need to get one id_num for each distinct name, such as 我需要为每个不同的名称获取一个id_num,例如
name id_num
Tom 27
Jane 16
Bill 97
For each name, the id_num can be randomly picked up (not required to be max or min) as long as it is associated with the name. 对于每个名称,只要它与名称相关联,就可以随机选择id_num(不需要为max或min)。
For example, for Bill, I can pick up 97 or 83. Either one is ok. 例如,对于比尔,我可以选择97或83。任何一种都可以。
I do know how to write the SQL query. 我确实知道如何编写SQL查询。
Thanks 谢谢
SELECT
name,MIN(id_num)
FROM YourTable
GROUP BY name
UPDATE: If you want pick id_num randomly, you may try this 更新:如果您想随机选择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
You could grab the max id like this: 您可以像这样获取最大id:
SELECT name, MAX(id_num)
FROM tablename
GROUP BY name
That would get you one id for each distinct name. 这样就可以为每个不同的名称获得一个ID。
从名称中从[mytable]组中选择名称max(id_num)
The (SELECT 1) in the cte does not really order the data in each of the partitions. cte中的(SELECT 1)并没有真正对每个分区中的数据进行排序。 which should give you the random selection.
这应该给您随机选择。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.