SQL-CASE-Anweisung: Bedingte Logik in deinen Abfragen

Published: 2026-02-11

Die CASE-Anweisung ist die SQL-Möglichkeit, bedingte Logik in deine Abfragen einzubauen. Sie funktioniert wie eine If-Then-Else-Anweisung und erlaubt dir, je nach Bedingung unterschiedliche Werte zurückzugeben. CASE wird in allen großen SQL-Datenbanken unterstützt, darunter SQLite, PostgreSQL, MySQL, SQL Server und Oracle.

Beispieldaten

Wir verwenden in allen Beispielen zwei Tabellen:

products-Tabelle:

id name category price stock rating
1 Laptop Pro Electronics 1299.99 15 4.5
2 Wireless Mouse Electronics 29.99 50 4.2
3 Office Chair Furniture 249.99 8 4.7
4 Desk Lamp Furniture 39.99 25 3.9
5 Notebook Pack Stationery 12.99 100 4.0
6 Pen Set Stationery 8.99 75 3.5
7 Monitor 27" Electronics 399.99 0 4.6
8 Standing Desk Furniture 599.99 3 4.8

orders-Tabelle:

id product_id quantity order_date status
1 1 2 2026-02-01 delivered
2 2 5 2026-02-03 shipped
3 3 1 2026-02-05 processing
4 4 3 2026-02-06 delivered
5 5 10 2026-02-07 shipped
6 1 1 2026-02-08 cancelled
7 7 1 2026-02-09 pending
8 8 1 2026-02-10 processing

Einfache CASE-Ausdrücke

Der einfache CASE-Ausdruck vergleicht eine Spalte oder einen Ausdruck mit bestimmten Werten. Er ist kompakt, wenn du Gleichheit prüfst.

Syntax

CASE column_name
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

Beispiel: Bestellstatus kategorisieren

Übersetze Bestellstatus-Codes in benutzerfreundliche Bezeichnungen:

Gesuchte CASE-Ausdrücke

Der gesuchte CASE-Ausdruck wertet boolesche Bedingungen aus und erlaubt komplexe Vergleiche und Bereiche.

Syntax

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Beispiel: Preiskategorien

Klassifiziere Produkte nach Preisspanne:

Beispiel: Lagerbestandsstatus

Bestimme den Lagerstatus mit unterschiedlichen Schwellenwerten:

Verwendung von CASE in Berechnungen

CASE-Anweisungen können Berechnungen verändern, bedingte Formeln anwenden oder NULL-Werte behandeln.

Beispiel: Kategorienbasierte Rabatte anwenden

Berechne Rabatte basierend auf der Produktkategorie:

Beispiel: Bestellpriorität nach Wert und Status

Berechne die Bestellpriorität basierend auf mehreren Faktoren:

CASE in Aggregationen

Verwende CASE innerhalb von Aggregatfunktionen, um pivotähnliche Berichte oder bedingte Zählungen zu erstellen.

Beispiel: Produkte nach Verfügbarkeit zählen

Zähle, wie viele Produkte in jeder Lagerkategorie sind:

Beispiel: Umsatz nach Kategorie und Status

Berechne verschiedene Kennzahlen mit bedingter Aggregation:

CASE in ORDER BY

Verwende CASE in ORDER BY, um benutzerdefinierte Sortierlogik zu erstellen.

Beispiel: Benutzerdefinierte Sortierreihenfolge

Sortiere Produkte mit eigener Priorität (zuerst ausverkauft, dann nach Bewertung):

Verschachtelte CASE-Anweisungen

CASE-Ausdrücke können für komplexere Logik verschachtelt werden.

Beispiel: Komplexe Produktklassifizierung

Kombiniere mehrere Kriterien für eine detaillierte Kategorisierung:

Häufige Anwendungsfälle für CASE-Anweisungen

  • Datenkategorisierung — Werte in Bereiche oder Kategorien gruppieren
  • Bedingte Formatierung — Benutzerfreundliche Labels oder Statusanzeigen darstellen
  • Dynamische Berechnungen — Unterschiedliche Formeln je nach Bedingung anwenden
  • Pivot-Tabellen-Erstellung — Mit Aggregationen für Kreuztabellenberichte kombinieren
  • Benutzerdefinierte Sortierung — Spezielle Sortierreihenfolgen für Geschäftslogik definieren
  • Umgang mit NULL-Werten — Fehlende Daten ersetzen oder kennzeichnen
  • Entscheidungen mit mehreren Kriterien — Komplexe Geschäftsregeln in SQL abbilden

CASE vs. IIF und COALESCE

  • CASE — Am flexibelsten, behandelt mehrere Bedingungen
  • IIF(condition, true_value, false_value) — Einfachere Syntax für eine einzelne Bedingung (SQL Server, Access)
  • COALESCE(val1, val2, …) — Gibt den ersten Nicht-NULL-Wert zurück (gut für den Umgang mit NULL)

SQLite unterstützt sowohl CASE als auch COALESCE, aber nicht IIF. Verwende CASE für maximale Kompatibilität.

Performance-Tipps

  1. Bedingungen sinnvoll anordnen — Wahrscheinlichste Bedingungen zuerst platzieren
  2. Redundante Auswertungen vermeiden — CASE wird sequentiell ausgewertet; sobald eine Bedingung zutrifft, wird abgebrochen
  3. Relevante Spalten indexieren — Wenn CASE Spaltenvergleiche nutzt, können Indizes helfen
  4. Berechnete Spalten in Betracht ziehen — Für häufig verwendete CASE-Logik unterstützen einige Datenbanken indizierte berechnete Spalten

Zusammenfassung

  • CASE fügt SQL-Abfragen bedingte Logik mit If-Then-Else-Verhalten hinzu
  • Einfaches CASE vergleicht eine Spalte mit bestimmten Werten: CASE column WHEN value THEN result
  • Gesuchtes CASE wertet boolesche Bedingungen aus: CASE WHEN condition THEN result
  • Kann in SELECT, WHERE, ORDER BY und Aggregatfunktionen verwendet werden
  • CASE-Ausdrücke können für komplexe Entscheidungsbäume verschachtelt werden
  • Immer eine ELSE-Klausel einbauen, um unerwartete Werte abzudecken
  • Wird in allen großen SQL-Datenbanken mit konsistenter Syntax unterstützt

Probiere aus, die Beispiele zu verändern, mit unterschiedlichen Bedingungen zu experimentieren und zu sehen, wie CASE deine bedingte Logik vereinfachen kann!