SQL Server分组查询如何筛选拥有多文档且包含指定类型文档的人员
你只需要在原有HAVING条件的基础上,新增一个条件聚合判断是否存在DocumentType=10的记录即可。另外注意原有SQL的SELECT子句里的DocumentType不符合GROUP BY规范,大多数数据库会执行报错,如果你只需要符合条件的人员名单,只保留Name字段即可。
修改后的完整SQL如下:
SELECT Name FROM ( SELECT Name, DocumentType FROM SomeTable UNION SELECT Name, DocumentType FROM SomeOtherTable UNION SELECT Name, DocumentType FROM YetAnotherTable ) AS AllUserDocument GROUP BY Name HAVING -- 满足条件1:文档类型数量大于1,UNION已自动去重,COUNT(*)直接对应不同类型的数量 COUNT(*) > 1 -- 满足条件2:存在类型为10的文档 AND SUM(CASE WHEN DocumentType = 10 THEN 1 ELSE 0 END) >= 1
补充说明:
- 如果你要统计的是总文档份数大于1(允许同类型多份文档),请把子查询中的
UNION替换为UNION ALL,避免UNION的去重特性导致计数偏小。 - 如果你使用的是支持布尔值聚合的数据库(如MySQL、PostgreSQL),条件2也可以简化写成
AND MAX(DocumentType = 10) = 1,执行效果完全一致。 - 如果你确实需要返回对应人员的所有DocumentType,可以在外层嵌套查询关联子查询结果获取,或者用GROUP_CONCAT之类的聚合函数返回类型列表。
内容的提问来源于stack exchange,提问作者Lou
相关产品推荐
相关产品推荐

