Articles

How to Use IF…THEN Logic in SQL Server

Posted on

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...ELSECASE-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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.