2016-10-28 7 views
0

Dies ist Rudresh BR, versucht, Daten der gleichen Zeilen in mehrere Spalten auch durch die Summe zu erhalten. Aber mit einem Problem stecken, finden Sie die folgenden Details erwähnt die Frage in Bezug auf,mehrere Summe mit Join in sql

Erwartete Daten:

Expected Data

aber erhalten Daten:

But obtained Data

Datenbestand in Tabelle

  1. Li st Artikel

Actual Data in Table

Abfrage verwendet:

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 und ist die Summe der Reihen von BID_Currency_Value der PCB und PTB sind.

Was ich beobachte ist, wenn die Summe also 3000 erfolgt (was ich als Ausgang erwarten), es ist die Summe redoing basierend auf der Anzahl der Zeilen, PCB und PTB existiert jeweils so, wie es 3 Reihen von PCB, 3000 + 3000 + 3000 = 9000 wird als O/P angegeben.

Ich bitte alle, Bitte helfen Sie mir herauszufinden, was schief läuft?

+0

Verwenden Sie SQL Server oder MySQL? Dies sind verschiedene Produkte, die oft unterschiedliche Lösungen erfordern. Bitte double nicht taggen. –

Antwort

2

Sie die Tabelle nicht selbst beitreten, Use-Case

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 
+0

Es wird Fehler Ursache der Linie 'und t.BID_UNIT_DIVISION = in ('PCB', 'PTB')' – Rahul

+0

Druckfehler korrigiert, sollte es 'in' der Ursache sein – Serg

+0

Danke Serg, es funktioniert perfekt :) – user3418716

0

Try this:

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 

Diese helfen könnte. :)