Die Formel SummeWenn kennen wir von Excel und ist dort oftmals recht hilfreich.
Doch wie bildet man eine solche Summierung innerhalb von SQL ab?
Mit einem kleinen ‚Trick‘ ist das möglich, hier an einem Beispiel erklärt.
Wir haben eine Tabelle mit den Spalten Artikelnummer, Menge, Datum. Es soll nun in einer Zeile zur jeweiligen Artikelnummer in mehreren Spalten die jeweiligen Jahressummen ausgegeben werden.
Unter Oracle würde das dann für die Jahre 2012 und 2011 so aussehen:
// 'Summe Wenn' unter Oracle
SELECT DISTINCT
artikelnummer,
SUM( CASE WHEN TO_CHAR(datum, 'YYYY')='2012' THEN menge ELSE 0 END ) AS Jahr_2012,
SUM( CASE WHEN TO_CHAR(datum, 'YYYY')='2011' THEN menge ELSE 0 END ) AS Jahr_2011
FROM tabelle
GROUP BY artikelnummer
Mit MySQL ist der Syntax etwas anders, die Logik aber die Selbe:
// 'Summe Wenn' unter MySQL
SELECT DISTINCT
artikelnummer,
sum( IF(YEAR(datum) = '2012', menge, 0) ) AS Jahr_2012,
sum( IF(YEAR(datum) =' 2011', menge, 0) ) AS Jahr_2011,
FROM tabelle
GROUP BY artikelnummer
Der erste Lösungsansatz über Subselect hat auch funktioniert, war aber deutlich weniger performant!
Eine Antwort auf „SQL: ‚Summe wenn‘“
Das Ganze wäre noch schicker und kompakter, wenn man anstelle des
case ... when
eindecode
verwendet.Achtung, dies gilt nur für Oracle!