SQL: Bedingte Logik in einer SELECT-Anweisung verwenden

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



In der SELECT-Anweisung sollen IF-ELSE-Operationen auf Werte durchgeführt werden. Dazu kann (außer in Jet-SQL) ein CASE-Ausdruck verwendet werden. Jet-SQL besitzt dafür die Funktion IIf(), die bis zu 7 Ebenen tief verschachtelt werden kann. Bei fehlender ELSE-Anweisung, bzw. ohne Angabe des dritten optionalen Arguments der IIf-Funktion, wird, falls die Bedingung im Ausdruck nicht erfüllt ist, Null als Ergebnis zurückgegeben.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgenden Abfragen selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.


Wenn ein Mitarbeiter z.B. 2000€ oder weniger verdient, wird die Meldung UNTERBEZAHLT, bei 4000€ oder mehr wird ÜBERBEZAHLT, und bei einem Wert dazwischen wird OK zurückgegeben.

SELECT ma_name, gehalt,
       IIf(gehalt <= 2000, 'UNTERBEZAHLT',
           IIf(gehalt >= 4000, 'ÜBERBEZAHLT', 'OK')) AS STATUS
FROM   mitarbeiter

oder mittels Switch()-Funktion:

SELECT ma_name, gehalt,
       Switch(gehalt <= 2000, 'UNTERBEZAHLT',
              gehalt >= 4000, 'ÜBERBEZAHLT', 
              True, 'OK') AS STATUS
FROM   mitarbeiter

Lösung für andere SQL-Dialekte

SELECT ma_name, gehalt,
       CASE WHEN gehalt <= 2000 THEN 'UNTERBEZAHLT'
            WHEN gehalt >= 4000 THEN 'ÜBERBEZAHLT'
            ELSE 'OK'
       END AS STATUS
FROM   mitarbeiter
ma_name gehalt STATUS
Schmidt 800 UNTERBEZAHLT
Allard 1600 UNTERBEZAHLT
Wecker 1250 UNTERBEZAHLT
Johann 2975 OK
Mertens 1250 UNTERBEZAHLT
Blank 2850 OK
Kühne 2450 OK
Scheidt 3000 OK
König 5000 ÜBERBEZAHLT
Dreher 1500 UNTERBEZAHLT
Adam 1100 UNTERBEZAHLT
Jakobs 950 UNTERBEZAHLT
Fuhrmann 3000 OK
Müller 1300 UNTERBEZAHLT



Zurück zur Übersicht