SQL Server如何筛选不包含指定子状态的caseid记录
SQL Server 实现方案
实现逻辑
按caseid对审计记录做分组后,通过聚合判断两个过滤条件是否满足:
- 该caseid对应的所有子状态不存在禁止列表中的值
- 该caseid对应的所有子状态全部属于允许列表中的值
分组聚合写法(仅返回符合条件的caseid)
SELECT caseid FROM [你的实际表名] GROUP BY caseid HAVING -- 无禁止子状态 COUNT(CASE WHEN auditcasesubstatusname IN ( 'Missing Document No Action', 'Missing Document Action Required', 'Referral Request' ) THEN 1 END) = 0 -- 所有子状态都在允许范围内 AND COUNT(CASE WHEN auditcasesubstatusname NOT IN ( 'Checklist Complete', 'All Documents Available', 'Review Complete' ) THEN 1 END) = 0
样例验证
针对提供的测试数据:
caseid=1的两个子状态都属于允许列表、无禁止状态,会正常返回caseid=41存在禁止状态Referral Request,同时存在允许列表外的状态Checklist Review,会被过滤排除,符合预期要求。
扩展写法(支持返回case的其他关联字段)
如果需要同时返回case的类型、状态等其他字段,可以用NOT EXISTS实现:
SELECT DISTINCT caseid, casetypename, auditcasestatusname FROM [你的实际表名] t1 WHERE NOT EXISTS ( SELECT 1 FROM [你的实际表名] t2 WHERE t2.caseid = t1.caseid AND ( t2.auditcasesubstatusname IN ('Missing Document No Action', 'Missing Document Action Required', 'Referral Request') OR t2.auditcasesubstatusname NOT IN ('Checklist Complete', 'All Documents Available', 'Review Complete') ) )
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

