2010-06-21 103 views
0

甚至不是如何单词这样一个问题:我有一个表,看起来像这样:
SQL代码来选择,选择唯一的列与行的另一列匹配

SELECT * FROM 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 



我需要一个查询,只返回一个匹配服务ID顶部(或第一)用户ID。 例如,我只想为每个ServiceID显示1个用户标识。比如下面:

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

+0

请尝试使用代码格式化程序清晰地格式化它。 – MJB 2010-06-21 16:09:33

回答

1

你不说这是SQL Server的版本,但对于MS SQL服务器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 
+0

是的,它是2005年。我尝试了这一点,它效果很好!谢谢。 – 2010-06-21 16:33:18

0

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

+0

top 1将只返回1行。我有列ServiceID和UserID。有一些ServiceID最多有5个userid,但我只想显示一个userid每个唯一的serviceid。 – 2010-06-21 16:16:30

0

你听起来像你不是太打扰它的用户ID你刚才想要任何一个?如果是的话,这将工作。

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