多个SUM(CASE WHEN)导致累积总和

时间:2017-09-08 18:58:01

标签: sql-server

我正在尝试为包含项目的基本出价(如果已选择),任何可能选择的替代出价(如果已选择)以及任何已批准的变更单的报表开发SQL Server视图。我的SQL如下。

SELECT p.ProjectID,
    p.ProjectName,
    e.NAME AS PM,
    ps.Description AS STATUS,
    (
        CASE 
            WHEN b.PriceBaseSelected = 1
                THEN b.PriceBase
            ELSE 0
            END
        ) AS BaseBid,
    SUM(CASE 
            WHEN ba.Selected = 1
                THEN ba.Amount
            ELSE 0
            END) AS 'AltBidSum',
    SUM(CASE 
            WHEN pco.STATUS = 'A'
                THEN pco.Amount
            ELSE 0
            END) AS COSum
FROM tblProject AS p
INNER JOIN tblProjectStatus AS ps ON p.ProjectStatusID = ps.ProjectStatusID
INNER JOIN tblEmployee AS e ON p.Scope_PM_EmployeeID = e.EmployeeID
INNER JOIN tblBid AS b ON p.ProjectID = b.BidID
LEFT OUTER JOIN tblBidAlternate AS ba ON p.ProjectID = ba.BidID
LEFT OUTER JOIN tblProjectChangeOrder AS pco ON p.ProjectID = pco.ProjectID
WHERE ps.Description <> 'Complete'
    AND ps.Description <> 'Accounting'
GROUP BY p.ProjectID,
    p.ProjectName,
    ps.Description,
    e.NAME,
    (
        CASE 
            WHEN b.PriceBaseSelected = 1
                THEN b.PriceBase
            ELSE 0
            END
        )

我遇到的问题是,在tblProjectChangeOrder上使用左连接时,当有多个更改订单时,查询将对每个更改订单的alt bid总和求和。例如,如果我选择的基本出价为10,000美元,单个选定的替代出价为2,000美元,4个批准的变更单每个500美元,我应该得到10000,2000和2000的输出。我得到的是输出10000,8000和2000.可以有多个备用出价,因此需要对列进行求和。

我猜我的问题源于加入两个不同的表,每个表中的总和可能不同。如果我有两个选定的替代出价,我可以预期我的变更单总和加倍。有没有办法构建这个,以便我可以有两个不同的表的总和,无论交替或变更单的数量?

0 个答案:

没有答案