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
- Bedingungen sinnvoll anordnen — Wahrscheinlichste Bedingungen zuerst platzieren
- Redundante Auswertungen vermeiden — CASE wird sequentiell ausgewertet; sobald eine Bedingung zutrifft, wird abgebrochen
- Relevante Spalten indexieren — Wenn CASE Spaltenvergleiche nutzt, können Indizes helfen
- Berechnete Spalten in Betracht ziehen — Für häufig verwendete CASE-Logik unterstützen einige Datenbanken indizierte berechnete Spalten
Zusammenfassung
CASEfü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!