CASE Statements

Geschätzte Lektüre: 3 Minuten 119 Ansichten

CASE Statements – Bedingte Logik in SQL

Das CASE-Statement ermöglicht bedingte Logik innerhalb einer SQL-Abfrage. Es funktioniert ähnlich wie eine if-then-else-Struktur in Programmiersprachen.

Einfache CASE-Syntax:

CASE 
    WHEN bedingung1 THEN ergebnis1
    WHEN bedingung2 THEN ergebnis2
    ELSE standardergebnis
END

Beispiel: Kategorisierung von Bestellwerten

SELECT 
    b.id AS bestellung_id,
    b.bestelldatum,
    COALESCE(SUM(bp.menge * bp.einzelpreis), 0) AS wert,
    CASE 
        WHEN COALESCE(SUM(bp.menge * bp.einzelpreis), 0) < 50 THEN 'Klein'
        WHEN COALESCE(SUM(bp.menge * bp.einzelpreis), 0) < 200 THEN 'Mittel'
        WHEN COALESCE(SUM(bp.menge * bp.einzelpreis), 0) >= 200 THEN 'Groß'
        ELSE 'Keine Positionen'
    END AS kategorie
FROM bestellungen b
LEFT JOIN bestellpositionen bp ON b.id = bp.bestellung_id
GROUP BY b.id, b.bestelldatum;

Beispiel: Produktpreis-Kategorien

SELECT 
    name,
    preis,
    CASE 
        WHEN preis < 50 THEN 'Budget'
        WHEN preis < 200 THEN 'Mittelklasse'
        ELSE 'Premium'
    END AS preiskategorie
FROM produkte
ORDER BY preis;

CASE mit Aggregationen

CASE kann innerhalb von Aggregatsfunktionen verwendet werden, um bedingte Zählungen oder Summen zu erstellen.

Beispiel: Bestellstatus-Übersicht pro Kunde

SELECT 
    k.nachname,
    k.vorname,
    COUNT(b.id) AS gesamt_bestellungen,
    SUM(CASE WHEN b.status = 'offen' THEN 1 ELSE 0 END) AS offene_bestellungen,
    SUM(CASE WHEN b.status = 'versendet' THEN 1 ELSE 0 END) AS versendete_bestellungen,
    SUM(CASE WHEN b.status = 'geliefert' THEN 1 ELSE 0 END) AS gelieferte_bestellungen
FROM kunden k
LEFT JOIN bestellungen b ON k.id = b.kunden_id
GROUP BY k.id, k.nachname, k.vorname;

Dieses Dokument teilen

CASE Statements

Oder Link kopieren

INHALT

Abonnieren

×
Cancel