SELECT Top 1 ID,DISTINCT Field

时间:2015-05-14 08:18:40

标签: sql sql-server sql-server-2008 tsql

我有一个表格样本表如下:

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

我想为每个人选择不同的城市和TOP ID。例如,从概念上讲,我想做以下

SELECT TOP 1 ID, DISTINCT City
FROM Cities

应该给我:

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

因为纽约出现两次,所以在这个例子中它是第一个ID 1

但我收到错误:

  

列'Cities.ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

4 个答案:

答案 0 :(得分:4)

尝试这种方式:

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

MIN函数用于从两个ID个城市中选择一个New York

答案 1 :(得分:4)

您需要将您的城市设为GROUP BY

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

答案 2 :(得分: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

答案 3 :(得分:3)

如果您有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