sql >> Database >  >> RDS >> Sqlserver

IF...THEN logica gebruiken in SQL Server

SQL Server heeft de unieke mogelijkheid om programmatische logica in realtime uit te voeren op de waarden in uw query. Op basis van die logische evaluaties kunt u verschillende waarden genereren als onderdeel van de geretourneerde dataset.

De CASE-statement gebruiken

Dit wordt het gemakkelijkst bereikt in alle versies van SQL Server met behulp van de CASE statement, dat fungeert als een logische IF...THEN...ELSE expressie en geeft verschillende waarden terug, afhankelijk van het resultaat.

In dit voorbeeld hieronder willen we een extra locale . teruggeven kolom die aangeeft of ons boek zich afspeelt in Midden-aarde of de gewone oude aarde.

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

Voordat we de speciale CASE onderzoeken aspect van deze verklaring, laten we tijdelijk de CASE om op te merken dat dit een uiterst eenvoudige SELECT . is verklaring aan de oppervlakte:

SELECT
  books.*
FROM
  books

Laten we daarom eens kijken hoe de CASE sectie is gestructureerd en welk logisch gedrag we vertonen.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Om te beginnen, initialiseren we de CASE statement specificeer dan onder welke voorwaarden (WHEN ) onze CASE verklaring moet een resultaat evalueren. In dit voorbeeld onderzoeken we de books.title en books.primary_author; als een van beide bij ons Tolkien-achtige thema past, THEN we retourneren de waarde 'Midden-aarde'. Als geen van beide velden overeenkomt met onze zoekopdracht, retourneren we in plaats daarvan de waarde van 'Aarde'.

Om de logica te herschikken als een pseudo-code IF...THEN...ELSE statement, vragen we SQL gewoon om te evalueren:

IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

Ten slotte is het van cruciaal belang om te onthouden dat een CASE statement moet altijd worden toegevoegd aan het einde met een overeenkomende END uitspraak. In het bovenstaande voorbeeld hernoemen we ook de resulterende waarde die wordt geretourneerd naar locale , hoewel dat zeker optioneel is.

De IIF-functie gebruiken

Als u een modernere versie van SQL gebruikt, is het handig om te weten dat SQL Server 2012 de zeer handige IIF heeft geïntroduceerd. functie. IIF is een verkorte methode voor het uitvoeren van een IF...ELSE /CASE statement en het retourneren van een van de twee waarden, afhankelijk van de evaluatie van het resultaat.

Ons bovenstaande voorbeeld herstructureren om IIF te gebruiken is vrij eenvoudig.

SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

Met een IIF functie, vervangen we grotendeels veel van de syntactische suiker uit de CASE verklaring met een paar eenvoudige kommascheidingstekens om onze argumenten te onderscheiden.

Alles bij elkaar genomen, beide CASE en IIF dezelfde klus klaren, maar als je de keuze krijgt, IIF zal over het algemeen veel eenvoudiger te gebruiken zijn.


  1. Kan geen entiteitsgegevensmodel maken - met MySql en EF6

  2. Overeenkomende algoritme in SQL

  3. Inzicht in Workload Analyzer om prestatieknelpunten in kaart te brengen

  4. SQL Server SELECT in bestaande tabel