2010-06-21 106 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