选择SQL代码以选择唯一列并与另一列上的行匹配

时间:2010-06-21 16:07:33

标签: sql

甚至不怎么说这个问题:我有一个看起来像这样的表:

从tblServiceUsers中选择* 按服务ID排序

0   B88230BB-4943-4C10-AB0E-8ABB88A357A3
0   5653C943-7F9A-4746-B2A3-1160E9204A7E
0   08678EE7-49A7-4F63-BC39-CFCCE2C9AD65
1   B88230BB-4943-4C10-AB0E-8ABB88A357A3
1   5653C943-7F9A-4746-B2A3-1160E9204A7E
2   B88230BB-4943-4C10-AB0E-8ABB88A357A3
2   5653C943-7F9A-4746-B2A3-1160E9204A7E



我需要一个只返回与serviceID匹配的顶级(或第一个)用户标识的查询。 例如,我只想为每个ServiceID显示1个UserID。如下:

0   B88230BB-4943-4C10-AB0E-8ABB88A357A3
1   B88230BB-4943-4C10-AB0E-8ABB88A357A3
2   B88230BB-4943-4C10-AB0E-8ABB88A357A3

3 个答案:

答案 0 :(得分:1)

您没有说它是哪个版本的SQL服务器,但对于MS SQL Server 2005以后,您可以执行以下操作:

 Select SecID, ServiceID, UserID from 
 (
    select ROW_NUMBER() OVER (PARTITION BY ServiceID ORDER BY Secid) AS row_number,
    SecID,
    ServiceID,
    UserID
    From tblSecServiceUsers
 ) 
 tempTable
 where row_number = 1

答案 1 :(得分:0)

为什么不使用TOP 1和ORDER BY子句?

答案 2 :(得分:0)

你听起来好像不是太烦恼哪个UserId你只想要任何一个?如果是这样,这将有效。

SELECT MAX(UserID) AS UserID, ServiceID  
 FROM tblServiceUsers 
GROUP BY ServiceID 
ORDER BY ServiceID