[英]multiple sum using join in sql
這是Rudresh BR,也嘗試通過求和將同一行的數據分成多列。 但是遇到了問題,請找到以下有關該問題的詳細信息,
預期數據:
但獲得的數據:
表中存在的數據
使用的查詢:
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.