SQL Server如何实现两个变量去重后的成功失败次数统计
解法1:单行查询(无需子查询)
核心利用COUNT(DISTINCT)去重统计失败记录,写法简洁:
SELECT SUM(CASE WHEN status_id IN (1,2,3,4) THEN 1 ELSE 0 END) AS success, COUNT(DISTINCT CASE WHEN status_id IN (5,6,7,8) THEN CONCAT(id, '-', status_id) ELSE NULL END) AS failed FROM test;
逻辑说明
- 成功计数逻辑和原有写法一致,满足统计需求
- 失败计数时将
id和status_id拼接为唯一标识,自动过滤同一个ID下重复的同类型失败记录,你的示例数据中两条status_id=5的失败记录仅会被统计1次,最终得到success=1、failed=2的预期结果。
解法2:CTE先去重后统计(可读性更高)
如果后续规则调整更灵活,推荐用CTE先处理去重逻辑:
WITH distinct_failed_records AS ( -- 先对失败记录按id+status_id去重 SELECT DISTINCT id, status_id FROM test WHERE status_id IN (5,6,7,8) ) SELECT -- 统计成功记录数 (SELECT COUNT(*) FROM test WHERE status_id IN (1,2,3,4)) AS success, -- 统计去重后的失败记录数 COUNT(*) AS failed FROM distinct_failed_records;
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

