繁体   English   中英

SQL SUM Group By with Case 语句

[英]SQL SUM Group By with Case statement

我想按状态分组并汇总总质押金额,但如果质押状态等于取消,则汇总已支付的总金额。 我不确定这样做的最佳方法是什么?

感谢您的反馈和帮助!

SELECT        
dbo.FoundationCompanies.companyState, 

CASE WHEN dbo.FondationOrder.pledgeStatus = 'canceled' THEN
 (
 SELECT        SUM(paid) AS total
 FROM            dbo.FoundationInvoice
 WHERE        (orderId = dbo.FondationOrder.orderId)
 ) 
 ELSE 
 dbo.FondationOrder.pledgeAmount 
 END AS pledgeAmount

 FROM            
 dbo.FoundationCompanies

 INNER JOIN
 dbo.FondationOrder 

 ON 
 dbo.FoundationCompanies.compId = dbo.FondationOrder.compId

 GROUP BY dbo.FoundationCompanies.companyState
 ORDER BY dbo.FoundationCompanies.companyState

示例数据:

阿冈昆 2500.00

亚特兰大 500000.00

贝茨维尔 10000.00

贝茨维尔 25000.00

我希望结果返回为:

金额|状态

100,000.00 美元|AL

145,000.00 美元|AZ

问:我不确定这样做的最佳方法是什么?
A : 不,它会使用多慢查询,你可以使用left join子查询来避免它,就像下面的脚本:

SELECT        
    companyState, 
    CASE WHEN FondationOrder.pledgeStatus = 'canceled' THEN
        T.total
    ELSE 
        FondationOrder.pledgeAmount 
    END AS pledgeAmount
FROM FoundationCompanies
INNER JOIN FoundationContacts ON FoundationCompanies.companyId = FoundationContacts.companyId 
INNER JOIN FondationOrder ON FoundationContacts.contactId = FondationOrder.contactId
LEFT JOIN (
    SELECT orderId,SUM(paid) AS total
    FROM  FoundationInvoice
    GROUP BY orderId
) T on T.orderId = FondationOrder.orderId
GROUP BY FoundationCompanies.companyState
ORDER BY FoundationCompanies.companyState

将 Order 表添加到您的连接中,然后使用聚合函数:

SELECT        
    dbo.FoundationCompanies.companyState,
    SUM(IIF(dbo.FondationOrder.pledgeStatus = 'canceled', dbo.FoundationInvoice.paid, dbo.FondationOrder.pledgeAmount)) AS pledgeAmount
FROM dbo.FoundationCompanies
INNER JOIN dbo.FoundationContacts ON dbo.FoundationCompanies.companyId = dbo.FoundationContacts.companyId
INNER JOIN dbo.FondationOrder ON dbo.FoundationContacts.contactId = dbo.FondationOrder.contactId
LEFT JOIN dbo.FoundationInvoice ON dbo.FondationOrder.orderId = dbo.FoundationInvoice.orderId
GROUP BY dbo.FoundationCompanies.companyState

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM