2017-07-11 45 views
2

我需要从条件'B'之后的字段总和中减去字段的总和如何从SQL Server 2014中的另一个总和值中减去Sum值?

我试过了不同的代码组合来尝试获取我正在查找的内容对于。但我认为最简单的,愚蠢的代码是这一个:

SELECT A.AccountNumber 
     ,SUM(
     (SELECT SUM(FinTransAmt) 
      FROM FinTransMaster 
      WHERE FinTransCode IN ('Code01', 'Code02', 'Code03', 'Code04') 
     ) 
    -  -- Minus sign 
     (SELECT SUM(FinTransAmt) 
      FROM FinTransMaster 
     WHERE FinTransCode IN ('Code05', 'Code06', 'Code07', 'Code08') 
     ) 
    ) AS Interest 

FROM FinTransMaster ft 
    , Account a 

WHERE ft.AcctID=a.AccountId 
    AND a.AccountNumber = '101010101' 
    AND CAST (ft.Created as date) >= '2017-06-01' 
    AND CAST (ft.Created as date) <= '2017-07-01' 

GROUP BY A.AccountNumber 

回答

1

也许是另一种选择

SELECT A.AccountNumber 
     ,Interest = IsNull(SUM(case when FinTransCode IN ('Code01', 'Code02', 'Code03', 'Code04') then FinTransAmt end),0) 
       - IsNull(SUM(case when FinTransCode IN ('Code05', 'Code06', 'Code07', 'Code08') then FinTransAmt end),0) 
FROM FinTransMaster ft 
    , Account a 
WHERE ft.AcctID=a.AccountId 
    AND a.AccountNumber = '101010101' 
    AND CAST (ft.Created as date) >= '2017-06-01' 
    AND CAST (ft.Created as date) <= '2017-07-01' 
GROUP BY A.AccountNumber 
+0

谢谢你,约翰。这看起来很整齐。只是一个简单的问题,将NULL值更改为0的代码是什么? _____ CASN当ISNULL(FinTransCode,0)IN('Code01','Code02'.....)然后... – user1777929

+0

@ user1777929对不起,多任务处理。我打算把IsNull()忘了。查看更新的答案 –

1

我想你可以通过使用条件汇总如下使用查询:

SELECT A.AccountNumber 
    ,Sum(case when FinTransCode in ('Code05', 'Code06', 'Code07', 'Code08') then -FinTransAmt else FinTransAmt end) as Interest 
FROM FinTransMaster ft 
    Join Account a 
    On ft.AcctID=a.AccountId 
    AND a.AccountNumber = '101010101' 
    AND CAST (ft.Created as date) >= '2017-06-01' 
    AND CAST (ft.Created as date) <= '2017-07-01' 
GROUP BY A.AccountNumber 
+0

好使用逻辑开关,但可能有需要排除的代码。 –

+0

谢谢你的回答,坎南。我非常感激。 – user1777929

相关问题