如何在SQL Server中筛选特定列无重复的全量记录?
解决SQL Server中仅保留Item列唯一记录的查询方法
你需要筛选出Item列值在表中仅出现一次的完整记录,SELECT DISTINCT是对整行去重(只有整行完全重复才会被过滤),所以不符合需求。下面提供两种适合SQL Server的可行方案:
方法一:使用窗口函数(推荐,直观易读)
通过COUNT() OVER (PARTITION BY Item)统计每个Item的出现次数,再筛选次数为1的记录:
SELECT * FROM ( SELECT *, -- 按Item分组统计每个Item的出现次数 COUNT(*) OVER (PARTITION BY Item) AS ItemOccurrenceCount FROM Bin ) AS FilteredBin -- 只保留出现次数为1的记录 WHERE ItemOccurrenceCount = 1;
方法二:使用子查询+关联查询
先通过子查询找出所有仅出现一次的Item值,再关联原表获取完整记录:
SELECT b.* FROM Bin b INNER JOIN ( -- 找出所有只出现一次的Item SELECT Item FROM Bin GROUP BY Item HAVING COUNT(*) = 1 ) AS UniqueItems ON b.Item = UniqueItems.Item;
为什么你之前用HAVING COUNT没成功?
直接在SELECT *后搭配GROUP BY Item会报错,因为SQL Server要求GROUP BY的列必须包含SELECT子句中所有非聚合列。所以需要先通过子查询筛选出唯一的Item值,再和原表关联才能拿到完整的行数据。
内容的提问来源于stack exchange,提问作者Jeff Ponce de Leon
相关产品推荐
相关产品推荐

