CASE Anweisungen

25 Februar 2012 von ms Kommentieren »

Fallunterscheidungen mit CASE Anweisungen

Eine Schwäche von SQL ist, dass es sich eine nicht prozedurale Sprache handelt. Eine Erweiterung, die hier einen Ausgleich zu Sprachen wie z.B. VB bringt ist die Anweisung CASE.

CASE wertet einen Ausdruck aus und gibt einen von mehreren denkbaren Ausdrücken zurück. CASE gibt es in zwei Versionen:

Einfache Version: Vergleich eines Ausdrucks mit verschiedenen einfachen Ausdrücken

Komplexe Version: Liste von Bedingungen, die True oder False zurückgeben

Case kann überall dort verwendet werden, wo ein Ausdruck erlaubt ist. Dies kann innerhalb von Spaltenlisten im Select-Abschnitt, aber auch innerhalb von Where- und Order-By-Abschnitten sein. Damit ist z.B. eine vom Benutzer festgelegte und durch einen Parameterwert erzeugte Sortierung möglich.

Syntax

Einfache Version

CASE <Prüfausdruck>
WHEN <erste Möglichkeit> THEN <erstes Resultat>
WHEN <zweite Möglichkeit> THEN <zweites Resultat>
ELSE <alternatives Resultat>
END

 

Beispiel:

Select

Firma,

case Status

WHEN 10 THEN ‘SUPER’

WHEN 20 THEN ‘OK’

ELSE ‘SCHLECHT’

end as Bewertung

FROM KDE

Komplexe Version

CASE
WHEN <erster Boolean-Ausdruck> THEN <erstes Resultat>
ELSE <alternatives Resultat>
END

 

Beispiel

SELECT

POS.PNR,

BEZ,

SUM(MENGE*VKP) as UMSATZ,

Case

WHEN SUM(MENGE*VKP) > (SELECT SUM(MENGE*VKP) FROM POS WHERE PNR = 20) THEN ‘Besser’

WHEN SUM(MENGE*VKP) < (SELECT SUM(MENGE*VKP) FROM POS WHERE PNR = 20) THEN ‘Schlechter’

end as Bewertung

 

FROM

PROD join POS on POS.PNR = PROD.PNR

Group By

POS.PNR, BEZ

Argumente

<Prüfausdruck>

der auszuwertende Ausdruck für die einfache Case-Version

<erste Möglichkeit>

der erste Ausdruck, der auf die Übereinstimmung mit dem Prüfausdruck getestet wird

<erstes Resultat>

das erste auszugebende Ergebnis

<alternatives Resultat>

das Ergebnis, welches ausgegeben wird, falls alle Prüfungen zuvor nicht positiv waren

<erster Boolean-Ausdruck>

ein Boolean-Ausdruck, der Vergleichsoperatoren (=, !=), Klauseln (Is Null, Between) und ähnliches enthalten kann oder eine Kombination mehrerer Boolean-Ausdrücke mit And/Or

Hinweise

Die einfache Version überprüft nur auf Gleichheit zwischen dem Prüfausdruck und den verschiedenen Alternativen mit dem ‘=’ – Operator. Damit kann sie durch die komplexe Version dargestellt werden, so das sie theoretisch entfernt werden könnte:

CASE
WHEN <Prüfausdruck> = <erste Möglichkeit>
THEN <erstes Resultat>
[...]
[
ELSE <alternatives Resultat>
]
END

Werbung

Kommentare geschlossen.