在sql中使用join的多个sum

时间:2016-10-28 12:15:47

标签: mysql sql sql-server sql-server-2008

这是Rudresh BR,尝试通过总和获得相同行的数据到多个列。但是遇到问题,请找到下面提到的有关该问题的详细信息,

预期数据:

Expected Data

但获得数据:

But obtained Data

表中的数据

  1. 列表项
  2. Actual Data in Table

    使用的查询:

    select 
        a.BM_BANK_NAME,
        SUM(PCBunit.BID_CURRENCY_VALUE) as PCBUnitSum,
         SUM(PTBunit.BID_CURRENCY_VALUE) as PTBUnitSum  
    from 
         dbo.BG_Mtr_Bank_Master a 
         inner join dbo.BG_Tra_Issuance_Details PCBunit on a.BM_ID=PCBunit.BID_BANK_NAME and PCBunit.BID_UNIT_DIVISION='PCB' 
         inner join dbo.BG_Tra_Issuance_Details PTBunit on a.BM_ID=PTBunit.BID_BANK_NAME and PTBunit.BID_UNIT_DIVISION='PTB' 
    group by 
         a.BM_BANK_NAME,
         PCBunit.BID_UNIT_DIVISION,
         PTBunit.BID_UNIT_DIVISION
    

    PCBUnitSum和PTBUnitSum分别是PCB和PTB的BID_Currency_Value行的总和。

    我观察的是一旦总和完成,即3000(我期望作为输出),它根据PCB和PTB分别存在的行数重做总和,因此有3行PCB,3000 + 3000 + 3000 = 9000为O / P.

    我要求所有人, 请帮我找出问题所在?

2 个答案:

答案 0 :(得分:2)

不要自行加入表格,用例

select a.BM_BANK_NAME
     , SUM(case when t.BID_UNIT_DIVISION ='PCB' then t.BID_CURRENCY_VALUE end) as PCBUnitSum
     , SUM(case when t.BID_UNIT_DIVISION ='PTB' then t.BID_CURRENCY_VALUE end) as PTBUnitSum  
  from dbo.BG_Mtr_Bank_Master a 
 inner 
  join dbo.BG_Tra_Issuance_Details t 
    on a.BM_ID = t.BID_BANK_NAME 
   and t.BID_UNIT_DIVISION in ('PCB', 'PTB')
 group  
    by a.BM_BANK_NAME

答案 1 :(得分:0)

试试这个:

X_test

这可能会有所帮助。 :)