3

我有下表,其中包含 ID 和 Number 列

ID Number 
1 34534 
1 45345 
1 45353 
2 56454 
2 45645 
3 65756 
3 67565 
3 87865 
3 38932 
4 36468 
4 45332 

预期输出是

1 34534 
2 56454 
3 65756 
4 36468 

我需要为每个 ID 取所有的第一个数字。

我怎样才能写一个查询来实现这一点?我不是 SQL 专家。:(

注意:使用 SQL Server 2005

4

2 回答 2

7

尝试这样的事情:

SELECT ID, Number FROM
    (SELECT ID, Number, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Number) RN FROM MyTable) Base
    WHERE Base.RN = 1

显然MyTable是你的桌子的名字

啊……显然2 56454是不可能的。你只能得到2 45645. ORDER BY除非您使用子句,否则 sql 表中的顺序是一种错觉。否则,SQL 服务器可以按照它想要的方式重新排序行。

于 2013-02-25T08:38:54.837 回答
0

CROSS APPLY的另一种选择

SELECT *
FROM dbo.test12 t1 CROSS APPLY (
                                SELECT TOP 1 Number
                                FROM dbo.test12 t2
                                WHERE t1.ID = t2.ID
                                ) o
WHERE t1.Number = o.Number   

SQLFiddle上的演示

于 2013-02-26T13:23:17.853 回答