[英]SELECT Top 1 ID, DISTINCT Field
我有一个表样本表如下:
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子句中。
试试这种方式:
SELECT min(ID), City
FROM Cities
Group by City
MIN
功能用于从两个New York
城市中选择一个ID
。
您需要将您的城市置于GROUP BY
SELECT MIN(ID), City
FROM Cities
GROUP BY City
更一般的解决方案是使用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
如果您有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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.