Sql server 导致累积和的多个和(情况下)

Sql server 导致累积和的多个和(情况下),sql-server,Sql Server,我正在尝试为报告开发一个SQL Server视图,其中包括项目的基本投标价格(如果选择)、任何可能选择的备选投标(如果选择)以及任何批准的变更单。我的SQL如下 SELECT p.ProjectID, p.ProjectName, e.NAME AS PM, ps.Description AS STATUS, ( CASE WHEN b.PriceBaseSelected = 1 THEN

我正在尝试为报告开发一个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
        )
选择p.projectd,
p、 项目名称,
e、 我的名字是PM,
ps.描述为状态,
(
案例
当b.PriceBaseSelected=1时
然后b.价格基础
其他0
结束
)作为底价,
总数(例)
当ba.Selected=1时
然后是ba。金额
其他0
结束)作为“AltBidSum”,
总数(例)
当pco.STATUS='A'
然后是pco金额
其他0
结束)作为COSum
从tblProject作为p
p.ProjectStatusID=ps.ProjectStatusID上作为ps的内部联接tblProjectStatus
在p.Scope\U PM\U EmployeeID=e.EmployeeID上以e的身份内部连接TBlemEmployee
p.projectd=b.BidID上作为b的内部联接tblBid
左外连接tblBidAlternate为p.ProjectID=ba.BidID上的ba
左外部联接tblProjectChangeOrder作为p.projectd上的pco=pco.projectd
其中ps.说明“完整”
和ps.说明“会计”
按p.Projectd分组,
p、 项目名称,
ps.说明,
e、 名字,
(
案例
当b.PriceBaseSelected=1时
然后b.价格基础
其他0
结束
)
我遇到的问题是,对于tblProjectChangeOrder上的左连接,当存在多个变更单时,查询将对每个变更单的alt bid sum求和。例如,如果我有一个选择的基本出价10000美元,一个选择的备选出价2000美元,以及4个批准的变更单各500美元,我应该得到10000、2000和2000的输出。我得到的是10000、8000和2000的产量。可以有多个备选投标,因此需要对该列求和

我猜我的问题源于连接两个不同的表,每个表的总和可能不同。如果我选择了两个备选投标,我可以预期我的变更单金额将翻倍。是否有一种方法可以将其组织起来,使我可以拥有两个不同表格的总和,而不考虑备选表格或变更单的数量

使用
sum(在此处插入sumcolumn[ba.Amount或Pco.Amount]取决于)除以(p.projectd)
以消除1:M记录可能出现的人为膨胀?或者在数据驱动表/内联视图中的联接之前进行求和。在分区上使用
sum(插入sumcolumn此处[ba.Amount或Pco.Amount],具体取决于)除以(P.projectd)
以消除1:M记录可能发生的人为膨胀?或者在驱动表/内联视图中的联接之前进行求和。