SQL Server查询:如何返回每个Dept唯一行且过滤ItemCount范围
解决SQL Server中按部门返回任意一行符合条件数据的问题
要实现筛选ItemCount在1000至8000之间,且每个Dept仅返回任意一行(保留全部三列)的需求,DISTINCT无法达成目标是因为它会基于所有选中列的唯一组合去重,而非按Dept分组保留任意行。以下是两种可行的实现方法:
方法一:使用ROW_NUMBER()窗口函数
通过窗口函数按Dept分组,每组内随机排序后取第一行:
SELECT ItemId, Dept, ItemCount FROM ( SELECT ItemId, Dept, ItemCount, -- 按Dept分组,组内随机排序生成行号 ROW_NUMBER() OVER (PARTITION BY Dept ORDER BY NEWID()) AS RowNum FROM YourTableName WHERE ItemCount BETWEEN 1000 AND 8000 ) AS SubQuery WHERE RowNum = 1;
- 若不需要随机返回,可将
ORDER BY NEWID()替换为ORDER BY ItemId或其他字段,只要保证每组仅筛选出第一行即可。
方法二:使用TOP 1 WITH TIES简化写法
利用TOP 1 WITH TIES特性,直接返回所有分组后的第一行:
SELECT TOP 1 WITH TIES ItemId, Dept, ItemCount FROM YourTableName WHERE ItemCount BETWEEN 1000 AND 8000 -- 按Dept分组,组内随机排序,让TOP 1 WITH TIES返回每组的第一行 ORDER BY ROW_NUMBER() OVER (PARTITION BY Dept ORDER BY NEWID());
内容的提问来源于stack exchange,提问作者Andy5
相关产品推荐
相关产品推荐

