Case in SQL Anweisung


Registrierer

Erfahrenes Mitglied
Tabelle sieht so aus:
Code:
id | SUMME_NE | MONAT | JAHR
1  |  54523   |   1   | 2000
2  |  44953   |   1   | 2000
3  |  63736   |   2   | 2001
4  |  74389   |   2   | 2001
5  |  54523   |   1   | 2002
6  |  44953   |   1   | 2002
7  |  63736   |   2   | 2004
8  |  74389   |   2   | 2004
Nun sind die Summen vor dem Jahr 2002 natürlich in DM, und ich möchte sie gleich innerhalb der Anweisung umrechnen.
Mein Versuch:
Code:
SELECT MONAT, JAHR,
CASE JAHR
 WHEN JAHR < 2002 
  THEN SUM(SUMME_NE*0.511292)
 ELSE 
  SUM(SUMME_NE)
END AS SUMME
FROM rechnungen
WHERE JAHR >  1999
GROUP BY MONAT, JAHR
SQL rechnet nicht :-(
Die Anweisung WHEN JAHR < 2002 wird komplett ignoriert und nur der ELSE Teil ausgeführt.
Offensichtlich greife ich nicht richtig auf das Feld JAHR zu, weiß jemand wie das geht?
 

merzi86

Erfahrenes Mitglied
Das case bei Mysql Funktioniert genauso, wie in Programmiersprachen bedeutet es vergleicht nur Werte.
Dadurch ist ein Vergleich ala ist Jahr < 2002 nicht möglich.

Für dein Fall wäre eine If-Anweisung das passende.
Code:
SELECT MONAT, JAHR,
     if( JAHR < 2002; SUM(SUMME_NE*0.511292);SUM(SUMME_NE) ) as SUMME
   FROM rechnungen
   WHERE JAHR >  1999
   GROUP BY MONAT, JAHR
 

merzi86

Erfahrenes Mitglied
Ahh Entschuldige

Die Semikolon (";") in der If-Anweisung müssen Kommatas (",") sein.

Code:
SELECT MONAT, JAHR,
     if( JAHR < 2002, SUM(SUMME_NE*0.511292),SUM(SUMME_NE) ) as SUMME
   FROM rechnungen
   WHERE JAHR >  1999
   GROUP BY MONAT, JAHR
 

Forum-Statistiken

Themen
272.355
Beiträge
1.558.606
Mitglieder
187.827
Neuestes Mitglied
kanagawez