SQL: ‚Summe wenn‘

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‘“

  1. Das Ganze wäre noch schicker und kompakter, wenn man anstelle des case ... when ein decode verwendet.

    Achtung, dies gilt nur für Oracle!

    SELECT DISTINCT
           artikelnummer,
           SUM( DECODE(TO_CHAR(datum, 'YYYY'), '2012', menge, 0) AS Jahr_2012,
           SUM( DECODE(TO_CHAR(datum, 'YYYY'), '2011', menge, 0) AS Jahr_2011
    FROM   tabelle
    GROUP BY artikelnummer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.