简体   繁体   English

SQL Server 2008 R2,为另一列的每个不同值选择一个列的一个值

[英]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

SQL Fiddle Demo SQL小提琴演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM