簡體   English   中英

在SQL中使用join進行多次和

[英]multiple sum using join in sql

這是Rudresh BR,也嘗試通過求和將同一行的數據分成多列。 但是遇到了問題,請找到以下有關該問題的詳細信息,

預期數據:

預期數據

但獲得的數據:

但是獲得的數據

表中存在的數據

  1. 項目清單

表中的實際數據

使用的查詢:

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 O / P = 9000。

我要求所有人,請幫助我找出問題所在?

不要自加入表,用例

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

嘗試這個:

DECLARE @list_item TABLE ( unit NVARCHAR(5),bank NVARCHAR(5),curr INT)
INSERT INTO @list_item VALUES ('PCB','SBI',1000),('PCB','SBI',1000),
('PCB','SBI',1000),('PTB','SBI',1000),('PTB','SBI',1000),
('PTB','SBI',1000)

SELECT bank,
SUM(CASE WHEN unit='PCB' THEN curr END) PCBUnitSum,
SUM(CASE WHEN unit='PTB' THEN curr END) PTBUnitSum
FROM ( SELECT unit,bank,SUM(curr)curr FROM @list_item 
group by unit,bank ) A GROUP BY bank

這可能會有所幫助。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM