SQL Server hat eine einzigartige Fähigkeit, die es Ihnen erlaubt, programmatische Logik in Echtzeit auf die Werte innerhalb Ihrer Abfrage anzuwenden. Basierend auf diesen logischen Auswertungen können Sie verschiedene Werte als Teil des zurückgegebenen Datensatzes generieren.
Verwenden der CASE-Anweisung
Dies lässt sich in allen Versionen von SQL Server am einfachsten mit der CASE
-Anweisung erreichen, die als logischer IF...THEN...ELSE
-Ausdruck fungiert und je nach Ergebnis verschiedene Werte zurückgibt.
In diesem Beispiel unten wollen wir eine zusätzliche locale
-Spalte zurückgeben, die angibt, ob unser Buch in Mittelerde oder der normalen alten Erde spielt.
SELECT CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth' END AS locale, books.*FROM books
Bevor wir den speziellen CASE
Aspekt dieser Anweisung untersuchen, entfernen wir vorübergehend das CASE
, um festzustellen, dass es sich oberflächlich betrachtet um eine extrem einfache SELECT
-Anweisung handelt:
SELECT books.*FROM books
Untersuchen wir also, wie der CASE
-Abschnitt aufgebaut ist und welches logische Verhalten wir ausführen.
CASE WHEN books.title = 'The Hobbit' THEN 'Middle-earth' WHEN books.primary_author = 'Tolkien' THEN 'Middle-earth' ELSE 'Earth'END AS locale
Zu Beginn initialisieren wir die CASE
-Anweisung und legen dann fest, unter welchen Bedingungen (WHEN
) unsere CASE
-Anweisung ein Ergebnis auswerten soll. In diesem Beispiel untersuchen wir das books.title
und books.primary_author
; wenn beide zu unserem Tolkien-esken Thema passen, THEN
geben wir den Wert ‚Mittelerde‘ zurück. Wenn keines der beiden Felder zu unserer Suche passt, geben wir stattdessen den Wert ‚Erde‘ zurück.‘
Um die Logik als psuedo-code IF...THEN...ELSE
-Anweisung umzugestalten, bitten wir einfach SQL um eine Auswertung:
IF title == 'The Hobbit' OR primary_author == 'Tolkien'THEN RETURN 'Middle-earth'ELSE RETURN 'Earth'END
Schließlich ist es wichtig zu wissen, dass eine CASE
-Anweisung immer mit einer passenden END
-Anweisung am Ende angehängt werden muss. Im obigen Beispiel benennen wir auch den resultierenden Wert, der zurückgegeben wird, in locale
um, obwohl das natürlich optional ist.
Verwenden der IIF-Funktion
Wenn Sie eine modernere Version von SQL verwenden, ist es nützlich zu wissen, dass SQL Server 2012 die sehr praktische IIF
-Funktion eingeführt hat. IIF
ist eine Shorthand-Methode, um eine IF...ELSE
CASE
-Anweisung auszuführen und je nach Auswertung des Ergebnisses einen von zwei Werten zurückzugeben.
Die Umstrukturierung unseres obigen Beispiels zur Verwendung von IIF
ist recht einfach.
SELECT IIF( books.title = 'The Hobbit' OR books.primary_author = 'Tolkien', 'Middle-earth', 'Earth') AS locale, books.*FROM books
Bei einer IIF
-Funktion ersetzen wir einen Großteil des syntaktischen Zuckers aus der CASE
-Anweisung durch ein paar einfache Komma-Seperatoren, um unsere Argumente zu unterscheiden.
Alles in allem erledigen sowohl CASE
als auch IIF
die gleiche Aufgabe, aber wenn man die Wahl hat, ist IIF
im Allgemeinen viel einfacher zu benutzen.