SQL CASE erlaubt es Ihnen, eine Datenbank zu ma­ni­pu­lie­ren, indem Sie bestimmte Be­din­gun­gen abfragen und Resultate anzeigen lassen. Der Ansatz der Bedingung CASE ähnelt dabei der Anweisung If-then-else.

Was ist SQL CASE?

In vielen Datenbank- und Pro­gram­mier­spra­chen ist die Anweisung If-then-else ver­brei­tet. Diese führt eine Aktion so lange durch, wie eine bestimmte Vor­aus­set­zung erfüllt ist. Trifft dies nicht länger zu, verlässt das ent­spre­chen­de Programm die Schleife oder führt eine andere Aktion aus. Die Struc­tu­red Query Language setzt auf ein ähnliches Prinzip und stellt die Anweisung SQL CASE zur Verfügung. Diese durch­läuft eine Liste von Be­din­gun­gen und antwortet mit einem be­stimm­ten Wert, sofern eine Bedingung erfüllt wird. Wird keine Bedingung erfüllt, antwortet sie mit einem Wert, der unter ELSE definiert ist. Gibt es keine ELSE-Ein­schrän­kung und keine Erfüllung der Be­din­gun­gen, wird NULL aus­ge­ge­ben.

vServer / VPS
VPS un­schlag­bar günstig auf Dell En­ter­pri­se Servern
  • 1 Gbit/s, un­be­grenzt Traffic & mehr Cores
  • Min­des­tens 99,99% Ver­füg­bar­keit & ISO-zer­ti­fi­zier­te Re­chen­zen­tren
  • Aus­ge­zeich­ne­ter 24/7 Premium-Support mit per­sön­li­chem Berater

Syntax und Funk­ti­ons­wei­se

Die grund­sätz­li­che Syntax von SQL CASE sieht aus wie folgt:

SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
END AS name
FROM name_der_tabelle;
sql

Dabei geben Sie mit dem den SQL-Befehl SELECT an, welche Spalten be­rück­sich­tigt werden sollen. Mit CASE über­prü­fen Sie die Bedingung. Trifft diese zu (ist sie also true), wird der Wert des hin­ter­leg­ten Resultats aus­ge­spielt. END AS beendet die Schleife. FROM gibt an, in welcher Tabelle diese Schleife durch­ge­führt werden soll.

Mit der op­tio­na­len Ein­schrän­kung ELSE sieht die Syntax fol­gen­der­ma­ßen aus:

SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
	ELSE anderes_resultat
END AS name
FROM name_der_tabelle;
sql

Beispiel für die Bedingung

Um die Funk­ti­ons­wei­se von SQL CASE zu ver­an­schau­li­chen, erstellen wir eine einfache Tabelle namens „Kun­den­lis­te“. Hier hin­ter­le­gen wir eine Kun­den­num­mer, den Namen des Kunden bzw. der Kundin, ihren oder seinen Standort, das Be­stell­da­tum, die Anzahl der be­stell­ten Artikel und den bezahlten Betrag in Euro.

Kun­den­num­mer Name Standort Datum Artikel Ge­samt­be­trag
1427 Schmidt Berlin 1/13/2024 14 634
1377 Schulz Hamburg 1/19/2024 9 220
1212 Peters Hamburg 1/3/2024 15 400
1431 Müller München 1/19/2024 22 912
1118 Becker Passau 2/1/2024 10 312

Nun nutzen wir die Bedingung, um die Liste durch­zu­ar­bei­ten. Für Ge­samt­be­trä­ge über 400 Euro soll ein be­stimm­ter Text aus­ge­ge­ben werden. Dies gilt ebenso für Beträge unter 400 Euro. Die Ein­schrän­kung ELSE nutzen wir für Be­stel­lun­gen, die genau bei 400 Euro liegen. Sie sehen dabei bereits, dass auch mehrere Be­din­gun­gen hin­ter­ein­an­der abgefragt werden können. Die passende Syntax für unser Beispiel ist diese:

SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
CASE
	WHEN Gesamtbetrag > 400 THEN 'Der Einkaufswert liegt über 400 Euro'
	WHEN Gesamtbetrag < 400 THEN ''Der Einkaufswert liegt unter 400 Euro'
	ELSE 'Der Einkaufswert beträgt genau 400 Euro'
END AS Bestelldetails
FROM Kundenliste;
sql

Die ent­spre­chen­de Ausgabe sieht so aus:

Kun­den­num­mer Name Standort Datum Artikel Ge­samt­be­trag Be­stell­de­tails
1427 Schmidt Berlin 1/13/2024 14 634 Der Ein­kaufs­wert liegt über 400 Euro
1377 Schulz Hamburg 1/19/2024 9 220 Der Ein­kaufs­wert liegt unter 400 Euro
1212 Peters Hamburg 1/3/2024 15 400 Der Ein­kaufs­wert beträgt genau 400 Euro
1431 Müller München 1/19/2024 22 912 Der Ein­kaufs­wert liegt über 400 Euro
1118 Becker Passau 2/1/2024 10 312 Der Ein­kaufs­wert liegt unter 400 Euro

Kom­bi­na­ti­on mit anderen An­wei­sun­gen

Sie können die Be­din­gun­gen auch innerhalb anderer An­wei­sun­gen abfragen. Im Folgenden ordnen wir die Einträge nach Kun­den­num­mer an. Wenn diese nicht angegeben (also NULL) ist, soll statt­des­sen der Kun­den­na­me be­rück­sich­tigt werden. Dies ist der ent­spre­chen­de Code:

SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
FROM Kundenliste
ORDER BY
(CASE
		WHEN Kundennummer IS NULL THEN Name
		ELSE Kundennummer
END);
sql

Die Ausgabe ist dann diese:

Kun­den­num­mer Name Standort Datum Artikel Ge­samt­be­trag
1118 Becker Passau 2/1/2024 10 312
1212 Peters Hamburg 1/3/2024 15 400
1377 Schulz Hamburg 1/19/2024 9 220
1427 Schmidt Berlin 1/13/2024 14 634
1431 Müller München 1/19/2024 22 912
Tipp

Mit SQL-Server-Hosting von IONOS haben Sie die Wahl zwischen MSSQL, MySQL oder MariaDB. Pro­fi­tie­ren Sie von einer au­ßer­ge­wöhn­li­chen Per­for­mance, einer starken Si­cher­heits­ar­chi­tek­tur und per­sön­li­cher Beratung!

Zum Hauptmenü