在 SQL 中使用条件过滤计算 Sum
在处理大型 SQL 语句时,经常需要计算汇总值。然而,有时需要根据特定条件仅考虑数据的子集。本文探讨如何修改现有报表以计算唯一交易 ID 的现金价值总和,但仅限于起息日期在上个月内的交易 ID。
问题:
要计算复杂 SQL 语句中每个交易 ID 的总现金,以下代码是使用:
select sum(cash) from Table a where a.branch = p.branch and a.transID = p.transID) TotalCash
但是,目的是修改此语句,仅将起息日期在上个月内的现金价值相加。
解决方案:
修改后的代码应将原始 CASE 表达式替换为以下:
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
说明:
原始代码中的 CASE 表达式使用了不正确的语法。在这种情况下,需要 SEARCH CASE 语法,因为正在评估布尔表达式以确定结果:
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
在修订后的代码中,CASE 表达式检查 ValueDate 是否大于 @startMonthDate。如果是,则现金金额包含在计算中;否则,将替换为 0。这确保仅考虑上个月内的现金价值。
性能注意事项:
如果性能成为问题,则建议考虑使用 JOIN 和 GROUP BY 而不是依赖子查询。这可能会提高语句的执行速度。
以上是如何用SQL计算最近一个月内的现金价值总和?的详细内容。更多信息请关注PHP中文网其他相关文章!