• 30.4.2017
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 6

CASE je výraz (expression), který umožňuje aplikovat podmíněnou logiku v sql skritpu. Jde o logiku, kdy na základě podmínky (ve WHEN) vrátí hodnotu definovanou v THEN části. Existují 2 formy Simple CASE Expression (jednoduchá forma) a Searched CASE expression (forma pro vyhledávání).

Konstrukce: CASE obsahuje tyto kompomenty – CASE, WHEN, THEN, ELSE, END

  1. Začínáme příkazem CASE
  2. Následuje alespoň jedna dvojice WHEN/THEN příkazů (WHEN podmínka THEN hodnota);
  3. Příkaz ELSE je volitelný a poskytuje způsob, jak podchytit hodnoty, které nejsou uvedeny v části WHEN/THEN
  4. Příkaz END musí být na konci a ukončujeme tím výraz;

Pozn. Pokud není ELSE definováno je pro varianty, které nejsou uvedeny ve WHEN/THEN predikátech, je vrácena hodnota NULL

Syntaxe Simple SQL CASE formy:

SELECT
    CASE Sloupec
        WHEN 0 THEN 'No'
        WHEN 1 THEN 'Yes'
        ELSE 'N/A'
    END AS Vysledky
FROM dbo.Tabulka;

Jednoduchá forma umožňuje hodnoty určitého sloupce porovnat proti nadefinovaným hodnotám a následně na základě těchto hodnot přiřadit výsledek. V tomto případě se porovnává sloupec “Sloupec”. Pokud je hodnota 0, je aktivována první WHEN/THEN a vrátí se “No”, pokud je 1 vrátí “Yes” a pokud není 1 ani 0 tak vrátí ‘N/A’.

Syntaxe Searched SQL CASE formy:

SELECT
    CASE
      WHEN ZnamkaNaVysvedceni BETWEEN 3 AND 5 OR (Predmet='Chovani' AND ZnamkaNaVysvedceni <>1) THEN 'Špatná známka'
      WHEN ZnamkaNaVysvedceni >= 1 THEN 'Dobrá známka'
      ELSE 'Neplatná hodnota. Známky na vysvědčení můzou být v rozsahu 1-5'
    END AS Vysledky
FROM dbo.Vysvedceni;

 

Tato forma je oproti jednoduché formě více flexibilnější. Jednoduchá forma umožňuje porovnat hodnoty na základě rovnosti. Searched CASE forma umožňuje aplikovat podmínky pomocí operátorů. Použití CASE jsme ukázali na příkladu s vysvědčením. Pomocí konstrukce říkáme, že každá známka >=3 nebo známka z chování <>1 je špatná. Ostatní známky jsou dobré.

V jakých SQL klauzulích se dá použít? 

  1. SELECT – podmíněnou logikou vrátíte nadefinované hodnoty
  2. WHERE – lze použít i k definování podmínky
  3. Agregace – výsledek můžete zabalit do agregačních funkcí
  4. GROUP BY – pokud definujete nějakou agregaci přes pole definované přes CASE, můžete umístit samotný case do GROUP BY
  5. ORDER – pomocí case lze teoreticky seřadit výsledky i když řazení je výkonově nárocně samo o sobě natož s použitím další CASE logiky, raději ne
5/5 - (1 vote)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

6 comments on “SQL CASE WHEN THEN ELSE s příklady

  1. Pěkně a velice srozumitelně vysvětlené.
    Moc děkuji, hlavně za informace k čemu se CASE to používá a že není v selectu žádné IF/THEN.
    Osobně mi přijdou hned první dvě věty článku o tom co příkaz vlastně dělá jako ty naprosto nejzásadnější informace,
    které toho nejvíc říkají 🙂

  2. Pěkné, srozumitelné, jen škoda, že příklad syntaxe Searched SQL CASE formy je lehce nesmysl (6 = dobrá známka) 😉

  3. Já bych ještě do vysvětlení doplnil, že příkaz CASE zpracovává pouze první vyhovující podmínku a případné další vyhovující již přeskakuje.

Leave a Reply

Your email address will not be published. Required fields are marked *