2015-05-14 218 views
4

我有一個表樣品表如下:SELECT TOP 1 ID,DISTINCT字段

ID | City 
-------------- 
1 | New York 
2 | San Francisco 
3 | New York 
4 | Los Angeles 
5 | Atlanta 

我想選擇不同城市和頂部ID的每個。例如,在概念上,我想做到以下幾點

SELECT TOP 1 ID, DISTINCT City 
FROM Cities 

應該給我:

ID | City 
-------------- 
1 | New York 
2 | San Francisco 
4 | Los Angeles 
5 | Atlanta 

由於紐約出現了兩次,它採取的第一個ID 1在這種情況下。

但我得到的錯誤:

Column 'Cities.ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+1

發佈您的整個代碼 – Matt

回答

4

試試這個方法:

SELECT min(ID), City 
FROM Cities 
Group by City 

MIN功能用於選擇從兩個New York城市ID之一。

+0

完美的作品 - 非常感謝! – keldar

+1

@keldar我很高興我可以幫助:) – Parado

3

更普遍的解決方案是使用row_number爲了得到表的其他細節:

select * from 
(select *, row_number() over(partition by City order by ID) as rn from Cities) 
where rn = 1 

但對於這個特殊的表格只是分組會做的工作:

select City, Min(ID) as ID 
from Cities 
group by City 
+0

這是我沒有想到的另一種解決方案 - 非常感謝。 – keldar

4

你需要有你的城市在一個GROUP BY

SELECT MIN(ID), City 
FROM Cities 
GROUP BY City 
+0

偉大的解決方案 - 謝謝! – keldar

3

如果你有一個補x方案Group By不能使用,您可以使用Row_Number()功能與Common Table Expression

;WITH CTE AS 
(
    SELECT ID, City, ROW_NUMBER() OVER (PARTITION BY City ORDER BY Id) rn 
    FROM YourTable 
) 
SELECT Id, City 
FROM CTE 
WHERE rn = 1