我正在处理从我们的系统导出到另一个系统的交易报告,并且有一个类似以下的查询
SELECT {otherFields},
CASE WHEN SUM(CASE WHEN FLAG='D' then -amount else amount) > 0
THEN SUM(CASE WHEN FLAG='D' then -amount else amount) ELSE 0 AS DEBIT
CASE WHEN SUM(CASE WHEN FLAG='C' then -amount else amount) <= 0
THEN -SUM(CASE WHEN FLAG='D' then - amount else amount) ELSE 0 AS CREDIT
FROM table INNER JOIN .....
查询按预期工作,但是我已经进行了4次相同的金额,首先确定其帐户的净借记或贷记是否再次将净金额插入借方或贷方列。
有没有办法在选择原因中捕获总和的值并重新使用它(或者sql server足够智能来缓存它),这样我的查询就像这样。
CASE WHEN @NET_TOTAL > 0 THEN @NET_TOTAL ELSE 0 AS DEBIT,
CASE WHEN @NET_TOTAL <= 0 THEN @NET_TOTAL ELSE 0 AS CREDIT
答案 0 :(得分:1)
如果这是您的目标,那么您应该使用公用表表达式。
答案 1 :(得分:0)
CTE /温度表是解决此问题的最佳方法。您可能会发现性能有所下降,但是您的代码将可读且可维护。