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

如何查找在GroupBy所有分组中均存在的数据行

找出存在于所有Personnel分组中的TaskId

这事儿好办!咱们要找的是在所有不同人员分组里都出现过的TaskId,核心思路就是统计每个TaskId覆盖了多少个唯一的PersonnelId,再和总共有多少个唯一的PersonnelId做对比——相等的就是目标TaskId。

这里有两种常用的实现方式:

方法一:使用变量存储总人员数

先获取临时表里一共有多少个不同的PersonnelId,再筛选出覆盖全部人员的TaskId:

-- 先计算总共有多少个唯一的PersonnelId
DECLARE @TotalUniquePersonnel INT
SELECT @TotalUniquePersonnel = COUNT(DISTINCT PersonnelId) FROM #People

-- 筛选出覆盖所有人员的TaskId
SELECT TaskId
FROM #People
GROUP BY TaskId
HAVING COUNT(DISTINCT PersonnelId) = @TotalUniquePersonnel

方法二:子查询直接对比

不用额外变量,直接在HAVING子句里嵌套子查询计算总人员数:

SELECT TaskId
FROM #People
GROUP BY TaskId
HAVING COUNT(DISTINCT PersonnelId) = (SELECT COUNT(DISTINCT PersonnelId) FROM #People)

代码解释

  • GROUP BY TaskId:把相同TaskId的记录归为一组
  • COUNT(DISTINCT PersonnelId):统计每个TaskId关联了多少个不同的人员(避免同一个人员多次关联同一个TaskId的干扰)
  • 最后用HAVING子句对比这个统计数和总人员数,相等就说明该TaskId在所有人员分组里都存在

用你给出的测试数据跑这段代码,结果正好会返回42,完全符合需求~

内容的提问来源于stack exchange,提问作者Bohn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:42:20