2016-06-30 23 views
1

Ich bin ein Anfänger in MySQL und ich brauche deine Hilfe. Ich habe so etwas wie dies:MySQL SUM von zwei Zeilen mit Bedingung

ID Project Type Amount 
1 1  I  5000 
2 1  D  1000 
3 2  I  3500 
4 3  I  4300 
5 3  D  1200 

Und ich möchte so etwas wie dies (die Differenz zwischen den Mengen an Typ I und Typ D für das gleiche Projekt, das D-Typ nicht immer vorhanden ist):

Project Amount 
1  4000 
2  3500 
3  3100 
+0

ist Projekt hat nur 2-Wert, was bedeutet, niedrig und hoch ist? –

Antwort

5

I case für Amount mit + oder - mit schlage vor:

select Project as Project, 
     sum(case 
       when Type = 'I' then 
       Amount 
       when Type = 'D' then 
       -Amount 
      end case) as Amount 
    from MyTable 
group by Project 
-- order by Project -- uncomment this if you want sorted cursor 
+0

er fragt den diffrent Wert zwischen 2 Werte, –

+0

@FreddySidauruk lesen Sie sorgfältig beantworten noch einmal. – Manwal

1

Tr Diese y;)

select 
    Project, 
    sum(if(Type = 'I', Amount, -Amount)) as Amount 
from table1 
group by Project 

SQLFiddle DEMO HERE

+0

Wahrscheinlich ist 'sum (wenn (Typ = 'I', Betrag, -Amount))' eine bessere Implementierung der Idee –

+0

@DmitryBychenko Hmm, Sie haben Recht. Es wurde aktualisiert. Vielen Dank. – Blank

+0

Bitte denken Sie daran, dass 'wenn' * kürzer * ist, aber * RDBMS-spezifisch * ist (deshalb bevorzuge ich' case') –