SQL Server verfügt über eine einzigartige Fähigkeit, die es Ihnen ermöglicht, programmgesteuerte Logik in Echtzeit auf die Werte in Ihrer Abfrage auszuführen. Basierend auf diesen logischen Auswertungen können Sie verschiedene Werte als Teil des zurückgegebenen Datensatzes generieren.
Verwendung der CASE-Anweisung
Dies wird am einfachsten in allen Versionen von SQL Server mit CASE
erreicht -Anweisung, die als logisches IF...THEN...ELSE
fungiert Ausdruck und gibt je nach Ergebnis verschiedene Werte zurück.
In diesem Beispiel unten möchten wir ein zusätzliches locale
zurückgeben Spalte, die angibt, ob unser Buch in Mittelerde oder auf 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
untersuchen Aspekt dieser Anweisung entfernen wir vorübergehend den CASE
um zu bemerken, dass dies ein extrem einfaches SELECT
ist Aussage an der Oberfläche:
SELECT
books.*
FROM
books
Lassen Sie uns daher untersuchen, wie der CASE
Abschnitt strukturiert 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 den CASE
Anweisung geben Sie dann an, unter welchen Bedingungen (WHEN
) unser CASE
Anweisung sollte ein Ergebnis auswerten. In diesem Beispiel untersuchen wir books.title
und books.primary_author
; wenn beides zu unserem Tolkien-ähnlichen Thema passt, THEN
Wir geben den Wert „Mittelerde“ zurück. Wenn keines der Felder mit unserer Suche übereinstimmt, geben wir stattdessen den Wert „Erde“ zurück.
Um die Logik als Pseudo-Code neu anzuordnen IF...THEN...ELSE
-Anweisung bitten wir SQL einfach, Folgendes auszuwerten:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Schließlich ist es wichtig, daran zu denken, dass ein CASE
-Anweisung muss am Ende immer ein passendes END
angehängt werden Erklärung. Im obigen Beispiel benennen wir auch den resultierenden Wert um, der in locale
zurückgegeben wird , obwohl das sicherlich optional ist.
Verwendung der IIF-Funktion
Wenn Sie eine modernere Version von SQL verwenden, ist es hilfreich zu wissen, dass SQL Server 2012 das sehr praktische IIF
eingeführt hat Funktion. IIF
ist eine Kurzformmethode zum Ausführen eines IF...ELSE
/CASE
-Anweisung und gibt je nach Auswertung des Ergebnisses einen von zwei Werten zurück.
Umstrukturierung unseres obigen Beispiels zur Verwendung von IIF
ist ganz einfach.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Mit einem IIF
Funktion ersetzen wir einen Großteil des syntaktischen Zuckers aus dem CASE
-Anweisung mit ein paar einfachen Komma-Trennzeichen, um unsere Argumente zu unterscheiden.
Alles in allem beides CASE
und IIF
Erledigen Sie dieselbe Aufgabe, aber wenn Sie die Wahl haben, IIF
wird im Allgemeinen viel einfacher zu verwenden sein.