我目前有一个大型 SQL 语句,我将以下行添加到其中,以便获取每个交易 ID 的总现金(这是唯一的):
select sum(cash) from Table a where a.branch = p.branch
and a.transID = p.transID) TotalCash
我现在需要做同样的事情,但只汇总上个月内有起息日期的现金价值,所以我有这样的东西:
select sum(CASE ValueDate WHEN > @startMonthDate THEN cash ELSE NULL END)
from Table a where a.branch = p.branch and a.transID = p.transID) TotalMonthCash
抱歉,我没有完整的声明,但它确实很长并且特定于存储过程的上下文,但希望有人会知道我的意思?
试试这个:
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
解释
您的 CASE 表达式的语法不正确。您似乎将简单的 CASE 表达式语法与搜索的 CASE 表达式语法混淆了。请参阅案例文档 http://msdn.microsoft.com/en-us/library/ms181765.aspx:
CASE 表达式有两种格式:
- 简单 CASE 表达式将一个表达式与一组简单表达式进行比较以确定结果。
- 搜索到的 CASE 表达式对一组布尔表达式进行求值以确定结果。
您需要搜索的 CASE 表达式语法:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
附带说明一下,如果性能是一个问题,您可能会发现,如果您使用 JOIN 和 GROUP BY 重写而不是使用依赖子查询,则该表达式运行得更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)