2017-02-17 5 views
0

freundlich in einer Abfrage zwei verschiedene Werte von derselben ID-Spalte zu summieren, kann jemand mir helfen, mit dieser, ich habe die folgende Tabelle:SQL-Abfrage

Tabellenname: Salden

cname  amount  type 
-------------------------------------- 
Jhon  150  A 
Jhon  200  B 
Jhon  100  A 
Jhon  30  A 
Jhon  55  B 

=== ==============================

Ich möchte eine SQLquery gibt mir dieses Ergebnis:

cname  totalOf_A totalOf_B 
--------------------------------------- 
Jhon  280   255 
========================================= 

Ich habe das fo versucht llwoing:

select ,cname,sum(amount),type from balances group by cname,type 

das Ergebnis:

cname  amount type 
----  -----  ---- 
Jhon  250  A 
Jhon  255  B  

so möchte ich das Ergebnis in einer Reihe und in einer Abfrage bitte.
Irgendwelche Vorschläge bitte.
Vielen Dank im Voraus.

Antwort

1

Was Sie versuchen zu tun, heißt bedingte Aggregation. Sie können verwenden

select 
cname, 
sum(case when type='A' then amount else 0 end) as total_A, 
sum(case when type='B' then amount else 0 end) as total_B 
from balances 
group by cname 
+0

vielen Dank mein Freund, es funktionierte. <3 Du hast meinen Tag gemacht. –

+0

vielleicht kann der Downvoter den Grund erklären? –

+0

weil Ihre Abfrage nicht die gewünschte Ausgabe – LONG

0
select A.cname,A.typeof_A,B.typeof_B 
    FROM 
    (
    select cname,sum(amount) as typeof_A 
    from balances 
    where type = 'A' 
    group by cname 
    ) as A 

    INNER JOIN 

    (
    select cname,sum(amount) as typeof_B 
    from balances 
    where type = 'B' 
    group by cname 
    ) as B 
    ON B.cname = A.cname 
+0

Ich habe ur Code versucht, aber wenn die Summe von Typ A oder B = '0' dann die Zeilen nicht in den Ergebnissen erscheint !! Es verwirrt mich wirklich und jetzt bin ich daran interessiert, die Antwort zu finden, warum das passiert ist! –

+0

ok, ich habe herausgefunden warum, nicht alle (cname) hat immer A oder Typ B in den Datensätzen, in einigen Fällen "cname" hat nur Typ A, oder nur Typ B, also in diesem Fall, wenn ich ur verwendet Abfrage und becase des "inneren Joins" zeigt es mir nur die Datensätze, die Typ A und B hat –