我有一个表格样本表如下:
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子句中。
答案 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