SQL CASE-Statement einfach erklärt: Bedingte Logik für Spalten, Gruppen und Datenqualität

Oft reichen einfache Abfragen nicht aus. Vielleicht möchtest du Alterswerte nicht einfach nur anzeigen, sondern sie in Gruppen wie „Jung“, „Erwachsen“ oder „Senior“ einteilen. Oder du willst Statuscodes in aussagekräftige Begriffe umwandeln. Genau dafür gibt es das CASE-Statement: Es erlaubt dir, direkt in der Abfrage eigene Regeln festzulegen und Daten so zu gestalten, wie du sie wirklich brauchst.

Warum ist das so praktisch?

  • Logik direkt in der Datenbank: Die Verarbeitung passiert dort, wo die Daten liegen – ohne Umwege über andere Tools.
  • Weniger Daten hin- und herschieben: Du erhältst bereits aufbereitete Ergebnisse, statt Rohdaten weiterverarbeiten zu müssen.
  • Mächtigere Abfragen: Mit CASE kannst du Berichte erstellen, die weit über simples Filtern oder Sortieren hinausgehen.

Das CASE-Statement macht deine Abfragen also flexibler, aussagekräftiger und spart dir oft viel Zeit bei der Datenanalyse.

SQL Case Statements

Die Syntax: Der Baukasten für deine Bedingungen

Bevor du das CASE-Statement effektiv einsetzt, ist es hilfreich, die grundlegenden Varianten zu kennen. Es gibt zwei Formen:

Einfaches CASE

Wird verwendet, wenn du eine Spalte auf bestimmte Werte prüfen möchtest. Es funktioniert wie ein simpler Schalter:

SELECT
  CASE spalte
    WHEN wert1 THEN 'Ergebnis1'
    WHEN wert2 THEN 'Ergebnis2'
    ELSE 'Anderes Ergebnis'
  END AS neue_spalte
FROM tabelle;

Durchsuchtes CASE

Hier kannst du beliebige Bedingungen prüfen, ähnlich wie ein flexibles IF-Statement. Dies ist die häufigere und mächtigere Variante:

SELECT
  CASE
    WHEN bedingung1 THEN 'Ergebnis1'
    WHEN bedingung2 THEN 'Ergebnis2'
    ELSE 'Anderes Ergebnis'
  END AS neue_spalte
FROM tabelle;

Der ELSE-Zweig ist besonders wichtig, da er als Fallback dient, wenn keine der Bedingungen zutrifft.

Anwendungsbereich 1: Dynamische Spalten im SELECT

Mit dem CASE-Statement kannst du Werte bei der Ausgabe direkt umbeschriften oder kategorisieren. So lassen sich deine Abfragen deutlich aussagekräftiger gestalten.

Beispiel 1: Kunden in Alterskategorien einteilen

SELECT name,
       CASE
         WHEN alter < 30 THEN 'Jung'
         WHEN alter BETWEEN 30 AND 59 THEN 'Erwachsen'
         ELSE 'Senior'
       END AS altersgruppe
FROM kunden;

Beispiel 2: Umsatzklassen bilden

SELECT kunde, umsatz,
       CASE
         WHEN umsatz < 1000 THEN 'Niedrig'
         WHEN umsatz BETWEEN 1000 AND 5000 THEN 'Mittel'
         ELSE 'Hoch'
       END AS umsatzklasse
FROM bestellungen;

Beispiel 3: Statuscodes in lesbare Beschreibungen übersetzen

SELECT name, statuscode,
       CASE statuscode
         WHEN 1 THEN 'Aktiv'
         WHEN 2 THEN 'Inaktiv'
         WHEN 3 THEN 'Gesperrt'
         ELSE 'Unbekannt'
       END AS status
FROM kunden;

Mit diesen einfachen Anwendungsbeispielen kannst du deine SELECT-Abfragen direkt erweitern, um die Daten sofort verständlicher und aussagekräftiger zu machen.

Anwendungsbereich 2: Komplexe Gruppierungen mit GROUP BY

Oft möchtest du nicht nach den ursprünglichen Werten gruppieren, sondern nach selbst definierten Kategorien. Mit dem CASE-Statement kannst du eine neue virtuelle Spalte erzeugen, die du anschließend im GROUP BY verwenden kannst.

Beispiel: Umsatzdaten nach Preisgruppen gruppieren

SELECT 
       CASE
         WHEN preis < 50 THEN 'Billig'
         WHEN preis BETWEEN 50 AND 200 THEN 'Standard'
         ELSE 'Premium'
       END AS preisgruppe,
       SUM(umsatz) AS gesamtumsatz
FROM produkte
GROUP BY 
       CASE
         WHEN preis < 50 THEN 'Billig'
         WHEN preis BETWEEN 50 AND 200 THEN 'Standard'
         ELSE 'Premium'
       END;

So kannst du schnell den Gesamtumsatz pro Preisgruppe berechnen, ohne die Originaldaten zu verändern oder zusätzliche Spalten in der Tabelle zu erstellen.

Dieses Prinzip lässt sich auf beliebige Kategorien anwenden – von Kundensegmenten über Regionen bis hin zu beliebigen Messwerten. Das CASE-Statement macht deine Gruppierungen flexibel und aussagekräftig.

Anwendungsbereich 3: Datenbereinigung und -transformation

Mit dem CASE-Statement kannst du ungültige, falsche oder inkonsistente Werte direkt in der Abfrage korrigieren oder anpassen. So werden deine Abfragen sauberer und aussagekräftiger.

Beispiel 1: Datensätze im WHERE filtern

Du möchtest nur Kunden abfragen, die als „Wertvoll“ eingestuft wurden:

SELECT *
FROM kunden
WHERE CASE 
        WHEN kundenwert = 'Gold' THEN 1
        WHEN kundenwert = 'Silber' THEN 1
        ELSE 0
      END = 1;

Beispiel 2: Falsche Werte im UPDATE korrigieren

Oft sind Tabellen nicht einheitlich gepflegt. Mit CASE kannst du die Werte vereinheitlichen:

UPDATE firmen
SET rechtsform = CASE 
                    WHEN rechtsform = 'GMbH' THEN 'GmbH'
                    WHEN rechtsform = 'Ag' THEN 'AG'
                    ELSE rechtsform
                  END;

Hinweis: Teste Änderungen vorher unbedingt mit einem SELECT, um unbeabsichtigte Updates zu vermeiden.

Auf diese Weise kannst du Daten direkt in der Datenbank transformieren, bevor du sie für Berichte oder Analysen verwendest.

Pro-Tipp: CASE in ORDER BY für benutzerdefinierte Sortierung

Mit CASE kannst du nicht nur Werte umwandeln, sondern auch die Reihenfolge deiner Abfragen individuell steuern. So lässt sich eine Sortierung realisieren, die über A-Z oder 1-9 hinausgeht.

Beispiel: Produkte nach benutzerdefinierter Kategorie sortieren

SELECT produktname, kategorie
FROM produkte
ORDER BY CASE kategorie
           WHEN 'Premium' THEN 1
           WHEN 'Standard' THEN 2
           WHEN 'Sonderangebot' THEN 3
           ELSE 4
         END,
         produktname;

In diesem Beispiel erscheinen zuerst alle Produkte der Kategorie „Premium“, danach „Standard“ und „Sonderangebot“. Innerhalb jeder Kategorie wird alphabetisch nach Produktname sortiert.

Mit dieser Technik kannst du flexibel jede gewünschte Sortierlogik direkt in SQL abbilden.

Cheat-Sheet: CASE-Statement auf einen Blick

Hier sind die wichtigsten Einsatzmöglichkeiten des CASE-Statements kompakt zusammengefasst, inklusive praktischer Beispiele:

  • SELECT: Werte umbenennen oder kategorisieren
    SELECT name,
           CASE
             WHEN alter < 30 THEN 'Jung'
             WHEN alter BETWEEN 30 AND 59 THEN 'Erwachsen'
             ELSE 'Senior'
           END AS altersgruppe
    FROM kunden;
  • GROUP BY: Virtuelle Kategorien für Aggregationen erstellen
    SELECT CASE
             WHEN preis < 50 THEN 'Billig'
             WHEN preis BETWEEN 50 AND 200 THEN 'Standard'
             ELSE 'Premium'
           END AS preisgruppe,
           SUM(umsatz) AS gesamtumsatz
    FROM produkte
    GROUP BY CASE
             WHEN preis < 50 THEN 'Billig'
             WHEN preis BETWEEN 50 AND 200 THEN 'Standard'
             ELSE 'Premium'
           END;
  • WHERE: Datensätze nach Bedingungen filtern
    SELECT *
    FROM kunden
    WHERE CASE
            WHEN kundenwert = 'Gold' THEN 1
            WHEN kundenwert = 'Silber' THEN 1
            ELSE 0
          END = 1;
  • UPDATE: Ungültige oder inkonsistente Werte korrigieren
    UPDATE firmen
    SET rechtsform = CASE
                        WHEN rechtsform = 'GMbH' THEN 'GmbH'
                        WHEN rechtsform = 'Ag' THEN 'AG'
                        ELSE rechtsform
                      END;
  • ORDER BY: Benutzerdefinierte Sortierung erzwingen
    SELECT produktname, kategorie
    FROM produkte
    ORDER BY CASE kategorie
               WHEN 'Premium' THEN 1
               WHEN 'Standard' THEN 2
               WHEN 'Sonderangebot' THEN 3
               ELSE 4
             END,
             produktname;

Dieses Cheat-Sheet dient als schneller Spickzettel, damit du die Flexibilität des CASE-Statements jederzeit gezielt nutzen kannst. Hier kannst du das Cheat Sheet runterladen: CASE Cheat Sheet (PDF)

Fazit: Das CASE-Statement in der Praxis

Das CASE-Statement ist eines der flexibelsten Werkzeuge in SQL. Es ermöglicht dir, Daten direkt in der Abfrage umzuwandeln, zu kategorisieren, zu bereinigen oder individuell zu sortieren.

Mit CASE kannst du:

  • Spaltenwerte dynamisch anpassen und aussagekräftiger gestalten.
  • Gruppen nach eigenen Kategorien bilden und Aggregationen sinnvoll auswerten.
  • Inkonsistente oder fehlerhafte Daten direkt in der Datenbank korrigieren.
  • Benutzerdefinierte Sortierungen erstellen, die über die Standard-Reihenfolge hinausgehen.

Für Einsteiger und fortgeschrittene Anfänger bedeutet das: Mehr Kontrolle über deine Abfragen, weniger Nachbearbeitung in externen Tools und deutlich aussagekräftigere Ergebnisse. Wer die Logik von CASE einmal verstanden hat, kann seine SQL-Abfragen wesentlich effizienter und intelligenter gestalten.

Es lohnt sich, das CASE-Statement regelmäßig einzusetzen, zu üben und eigene kleine Beispiele zu erstellen – so wirst du Schritt für Schritt sicherer und flexibler im Umgang mit bedingter Logik in SQL.