如何在SQL Server 12.0.4100.1中将行合并为列统计完成状态?
解决方案:用条件聚合合并行
当然可以实现!你需要用到条件聚合的技巧,把原本按complete分组产生的两行数据,合并成一行并分别统计完成和未完成的数量。
针对你的场景,complete是BIT类型,值为1(完成)或NULL(未完成),我们可以通过SUM()结合条件判断来分别统计两类数量:
SELECT OrgLevel3, OrgLevel4, SUM(CASE WHEN complete = 1 THEN 1 ELSE 0 END) AS '# Complete', SUM(CASE WHEN complete IS NULL THEN 1 ELSE 0 END) AS '# Incomplete' FROM #reconcile GROUP BY OrgLevel3, OrgLevel4 ORDER BY OrgLevel3, OrgLevel4;
解释一下关键部分:
- 去掉了
GROUP BY里的complete,因为我们不再需要按它分组,而是在聚合函数里区分统计 CASE WHEN complete = 1 THEN 1 ELSE 0 END:遇到完成的记录就返回1,否则返回0,用SUM()累加就得到完成的总数CASE WHEN complete IS NULL THEN 1 ELSE 0 END:同理,统计未完成(值为NULL)的记录数
如果你习惯用更简洁的语法,SQL Server 2012及以上版本支持IIF()函数,上面的语句可以改写为:
SELECT OrgLevel3, OrgLevel4, SUM(IIF(complete = 1, 1, 0)) AS '# Complete', SUM(IIF(complete IS NULL, 1, 0)) AS '# Incomplete' FROM #reconcile GROUP BY OrgLevel3, OrgLevel4 ORDER BY OrgLevel3, OrgLevel4;
这两种写法效果完全一致,选你觉得更易读的就行~
内容的提问来源于stack exchange,提问作者Gargoyle
相关产品推荐
相关产品推荐

