【问题标题】:Sum results of two sql queries from same table同一张表中两个sql查询的求和结果
【发布时间】:2015-10-29 16:22:33
【问题描述】:

我想出了这两个查询来根据特定的 where 子句在单个表上查找字段的总和:

Select Sum(dbo.Charges.[TRANS AMT]) as Total1  
from dbo.Charges 
where (dbo.Charges.[TRAN ID] IN (100, 20, 50, 52, 55, 60, 600))   

Select Sum(dbo.Charges.[TRANS AMT]) as Total2  
from dbo.Charges 
where dbo.Charges.[TRAN ID] = 200

我在想办法将两个查询的结果加在一起以获得总计时遇到了麻烦。关于如何做到这一点的任何建议?

【问题讨论】:

    标签: sql sql-server-2008 ssrs-2008-r2


    【解决方案1】:

    只需将[TRAN ID] 200 添加到IN 子句:

    SELECT SUM(dbo.Charges.[TRANS AMT]) AS GRAND_TOTAL
    FROM dbo.Charges 
    WHERE dbo.Charges.[TRAN ID] IN (100, 20, 50, 52, 55, 60, 600, 200);
    

    要得到所有的总和:

    SELECT
       SUM(CASE WHEN dbo.Charges.[TRANS AMT] <> 200 THEN dbo.Charges.[TRANS AMT] END) AS Total1,
       SUM(CASE WHEN dbo.Charges.[TRANS AMT] = 200 THEN dbo.Charges.[TRANS AMT] END) AS Total2,
       SUM(dbo.Charges.[TRANS AMT]) AS GRAND_TOTAL
    FROM dbo.Charges 
    WHERE dbo.Charges.[TRAN ID] IN (100, 20, 50, 52, 55, 60, 600, 200);
    

    【讨论】:

    • 这很简单,不是我太复杂了。谢谢!
    【解决方案2】:

    由于产生这些和的行是互斥的,您可以将[TRAN ID]s 合并到它们的where 子句中:

    SELECT SUM(dbo.Charges.[TRANS AMT]) as GrandTotal
    FROM   dbo.Charges
    WHERE  dbo.Charges.[TRAN ID] IN (100, 20, 50, 52, 55, 60, 600, 200)
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多