You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:02:06