CASE je výraz (expression), který umožňuje aplikovat IF/THEN logiku v sql skritpu. Jde o podmíněnou 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
- Začínáme příkazem CASE
- Následuje alespoň jedna dvojice WHEN/THEN příkazů (WHEN podmínka THEN hodnota);
- Příkaz ELSE je volitelný a poskytuje způsob, jak podchytit hodnoty, které nejsou uvedeny v části WHEN/THEN
- 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é.
Kde se dá použít?
- SELECT – podmíněnou logikou vrátíte nadefinované hodnoty
- WHERE – lze použít i k definování podmínky
- Agregace – výsledek můžete zabalit do agregačních funkcí
- GROUP BY – pokud definujete nějakou agregaci přes pole definované přes CASE, můžete umístit samotný case do GROUP BY
- ORDER – pomocí case lze seřadit výsledky
A co dvojka na vysvědčení?
Dvojka je pořešená v druhé větvi WHEN ZnamkaNaVysvedceni >= 1 THEN ‘Dobrá známka’
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í 🙂
Pěkné, srozumitelné, jen škoda, že příklad syntaxe Searched SQL CASE formy je lehce nesmysl (6 = dobrá známka) 😉