2017-11-13 2 views
0

Ich bin in einer seltsamen Situation mit meiner Abfrage. Mein Ziel ist es, die gesamten Ein- und Auszahlungen aus mehreren Transaktionen für jede Person anzuzeigen und anzuzeigen. Ich bekomme mehrere Zeilen, die ich in einen zusammenfassen muss. Dies alles muss geschehen in einer AbfrageWie komprimiere ich Zeilen auf Null-Werte in T-SQL?

SELECT 
     lastname, 
     firsname, 
     case when upper(category) = 'W' then sum(abs(principal)) end as Withdrawal, 
     case when upper(category) = 'D' then sum(abs(principal)) end as Deposit, 
     description 
FROM 
     table1 
     JOIN table2 ON table1.id = table2.id 
     JOIN table3 ON table2.c = table3.c 
WHERE 
     description = 'string' 
GROUP BY 
     lastname, 
     firstname, 
     description, 
     category 

mein Ergebnis ist

lastname firstname Withdrawal Deposit description 
john   smith  null   140.34 string 
john   smith  346.00   null  string 
jane   doe   null   68.03  string 
jane   doe   504.00   null  string 

und ich suche

lastname firstname Withdrawal Deposit description 
john   smith  346.00  140.34  string 
jane   doe   504.00  68.03  string 

Zugabe Haupt in die Gruppe funktioniert nicht. jede Hilfe bei der Lösung wird sehr geschätzt!

+0

Entfernen Kategorie aus der Gruppe von und Summe außerhalb des Falles? – xQbert

Antwort

1

Verwenden Sie bedingte Aggregation. . . die case ist das Argument der sum():

select lastname, firsname, 
     sum(case when upper(category) = 'W' then abs(principal) end) as Withdrawal, 
     sum(case when upper(category) = 'D' then abs(principal) end) as Deposit, 
     description 
from table1 join 
    table2 
    on table2.id = table1.id join 
    table3 
    on table3.c = table2.c 
where description = 'string' 
group by lastname, firstname, description 
+0

nützliche Lösung. –

+0

Ja, das funktionierte in Kombination mit dem Vorschlag von xQbert! Vielen Dank! – Zman25

0

Lösung Subquery

select t.lastname, t.firsname,sum(t.Withdrawal) Withdrawal ,sum(t.Deposit) Deposit,t.description from(
select lastname, firsname, 
     isnull(case when upper(category) = 'W' then abs(principal) end,0) as Withdrawal, 
     isnull(case when upper(category) = 'D' then abs(principal) end,0) as Deposit, 
description 
from table1 join 
    table2 
    on table2.id = table1.id join 
    table3 
    on table3.c = table2.c 
where description = 'string' 
)t group by t.lastname, t.firstname, t.description, t.category 
0

versuchen, diesen

SELECT Nachname, firsname, SUM (Fall, wenn die obere (Kategorie) = 'W' dann abs (principal) end) als Auszahlung, SUM (Fall wenn obere (Kategorie) = 'D' dann abs (Haupt) Ende) als Anzahlung, Beschreibung VON Tabelle1 JOIN Tabelle2 ON table1.id table2.id = JOIN Tab.3 auf table2.c = table3.c WHERE description = 'string' GROUP BY Nachname, Vorname, Beschreibung

Verwandte Themen