SQL Server GROUP BY分组时按条件对两列之一求和实现问题
SQL Server动态选择列分组求和解决方案
核心实现思路:将判断逻辑放在SUM聚合函数内部,逐行选择需要累加的列值,再按Station、Location、Contact三个维度分组聚合即可,无需使用窗口函数。
实现代码
SELECT Station, Location, Contact, SUM( CASE WHEN ColToUse = 1 THEN ColToSum WHEN ColToUse = 2 THEN AltColToSum ELSE 0 -- 处理ColToUse异常值,可根据实际需求调整 END ) AS TotalSum FROM 你的业务表名 -- 替换为实际表名 GROUP BY Station, Location, Contact
结果校验
以上代码运行后会完全匹配你提供的预期输出:
- Station 1 合计:4 + 10 + 2 +7 = 23
- Station 2 合计:5 + 10 + 10 = 25
- Station 3 合计:5 +10 +10 +1 =26
常见错误说明
之前使用CASE搭配GROUP BY未得到正确结果,大概率是将CASE语句写在了GROUP BY子句中,会额外拆分分组维度,导致输出行数超出预期;或者将CASE放在聚合函数外部,未正确逐行计算取值。
内容的提问来源于stack exchange,提问作者buckshot
相关产品推荐
相关产品推荐

