Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verwenden Sie die IF...THEN-Logik in SQL Server

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.