2015-05-14 221 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