sql >> Databáze >  >> RDS >> Sqlserver

Jak používat logiku IF...THEN v SQL Server

SQL Server má jedinečnou schopnost vám umožnit spouštět programovou logiku v reálném čase na hodnotách v dotazu. Na základě těchto logických vyhodnocení můžete generovat různé hodnoty jako součást vrácené datové sady.

Použití příkazu CASE

Toho lze nejsnáze provést ve všech verzích SQL Server pomocí CASE příkaz, který funguje jako logický IF...THEN...ELSE výraz a vrací různé hodnoty v závislosti na výsledku.

V tomto příkladu níže chceme vrátit další locale sloupec, který udává, zda se naše kniha odehrává ve Středozemi nebo na běžné staré Zemi.

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

Než prozkoumáme speciální CASE aspekt tohoto prohlášení, dočasně odstraňte CASE abyste si všimli, že se jedná o extrémně jednoduchý SELECT prohlášení na povrchu:

SELECT
  books.*
FROM
  books

Proto se podívejme, jak CASE sekce je strukturovaná a jaké logické chování provádíme.

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

Pro začátek inicializujeme CASE poté určete, za jakých podmínek (WHEN ) náš CASE prohlášení by mělo vyhodnotit výsledek. V tomto příkladu zkoumáme books.title a books.primary_author; pokud některá vyhovuje našemu tématu ve stylu Tolkiena, THEN vrátíme hodnotu ‚Middle-earth.‘ Pokud ani jedno pole neodpovídá našemu vyhledávání, vrátíme místo toho hodnotu ‚Earth‘.

Chcete-li změnit uspořádání logiky jako pseudokód IF...THEN...ELSE příkazu, jednoduše žádáme SQL, aby vyhodnotil:

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

Nakonec je důležité si uvědomit, že CASE příkaz musí být vždy připojen na konec s odpovídajícím END prohlášení. Ve výše uvedeném příkladu také přejmenujeme výslednou hodnotu, která se vrátí na locale , i když je to určitě volitelné.

Použití funkce IIF

Pokud používáte modernější verzi SQL, je užitečné vědět, že SQL Server 2012 představil velmi praktický IIF funkce. IIF je zkrácená metoda pro provedení IF...ELSE /CASE a vrátí jednu ze dvou hodnot v závislosti na vyhodnocení výsledku.

Restrukturalizace našeho výše uvedeného příkladu na použití IIF je docela jednoduché.

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

S IIF Z velké části nahrazujeme mnoho syntaktického cukru z CASE prohlášení s několika jednoduchými čárkami pro odlišení našich argumentů.

Vše řečeno, oba CASE a IIF udělat stejnou práci, ale pokud máte na výběr, IIF bude obecně mnohem jednodušší.


  1. Jak vytvořit řádek součtů v Accessu

  2. Zkontrolovat, zda soubor existuje nebo ne na serveru SQL?

  3. Tabulka popisu SQLite

  4. Jak se stát návrhářem databáze