SQL Server条件列求和技术问询:实现ProductionValue大于0时累加该列,否则累加SubTotal列
解决SQL Server中按日期分组的条件求和问题
让我帮你修正这个SQL语句,先梳理下原语句的核心问题:
- 条件逻辑完全搞反了:你的需求是ProductionValue大于0时累加它,否则累加SubTotal,但原语句的判断逻辑刚好颠倒了
- 错误地用字符串对比数值字段:
ProductionValue作为数值类型字段,不该和字符串'-1.0'做比较,直接用数值判断更精准 - 结果列的别名可以更贴合需求,避免和原字段混淆
正确的SQL实现
SELECT Date, SUM(CASE WHEN ProductionValue > 0 THEN ProductionValue ELSE SubTotal END) AS TotalSum FROM Appointment GROUP BY Date ORDER BY Date ASC;
对应数据的计算验证
我们拿你提供的表数据核对结果,完全匹配预期:
- 2021-09-02:
- 行1:ProductionValue=-1 ≤0 → 取SubTotal=10
- 行2:ProductionValue=10>0 → 取10
- 总和:10+10=20(符合预期)
- 2021-09-01:
- 行3:ProductionValue=-1 ≤0 → 取20
- 行4:ProductionValue=-1 ≤0 → 取20
- 行5:ProductionValue=5>0 → 取5
- 总和:20+20+5=45(符合预期)
如果你的ProductionValue字段确实是字符串类型(非常不推荐数值用字符串存储),可以把条件调整为CAST(ProductionValue AS DECIMAL(18,2)) > 0,不过优先建议把字段类型改成数值型,避免后续出现更多问题。
内容的提问来源于stack exchange,提问作者John Laggui
相关产品推荐
相关产品推荐

