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

时间:2014-06-27 14:25:50

标签: sql sql-server sql-server-2008 windows-7

在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查询。

由于

4 个答案:

答案 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

SQL Fiddle Demo

答案 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