繁体   English   中英

SELECT Top 1 ID,DISTINCT Field

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM