Blog JSystems - uwalniamy wiedzę!

Szukaj

CASE WHEN, w skrócie

Warunek if-then-else wewnątrz zapytania:

SELECT
  CASE WHEN warunek THEN 'A' ELSE 'B' END AS wynik
FROM tabela;

Wyrażenie case zapewnia funkcjonalność konstrukcji typu when-then-else w SQL.

Wynik wyrażenia case może być m.in. uzależniony od wartości w jednej kolumnie :

select Name, ProductCategoryID, case ProductCategoryID

when 18 then ‘Kategoria Numer 18’

when 35 then ‘Kategoria Numer 35’

when 23 then ‘Kategoria Numer 23’

end WarunekCase from SalesLT.Product;

55.jpg (644×412)

Wyświetlenie przedstawia wyrażenie warunkowe case, nałożone na kolumnę z identyfikatorem kategorii produktu. W wierszach 1,2,3,6 i 7 widać, że wyrażenie zostało spełniony dlatego też w kolumnie WarunekCase, wyświetlony został odpowiedni komunikat. W przypadku pozostałych wierszy, wyrażenie nie zostało spełnione, dlatego też otrzymaliśmy wartości null. Dodatkowo widać że wyrażenie warunkowe zostało zaaliasowane jako WarunekCase. Można to oczywiście pominąć, ale wtedy, tak jak i we wcześniejszych przypadkach, otrzymamy kolumnę bez nazwy. W powyższym przykładzie nie został jeszcze użyty element konstrukcji else, dlatego też w przypadku nie spełnienia warunków wyrażenia wyskoczyły wartości null.

select Name, ProductCategoryID, case ProductCategoryID

when 18 then ‘Kategoria Numer 18’

when 35 then ‘Kategoria Numer 35’

when 23 then ‘Kategoria Numer 23’

else ‘Pozostałe Numery Kategorii’

end WarunekCase from SalesLT.Product;

56.jpg (647×437)

W tym wyświetleniu w przypadku nie spełnienia wyrażenia warunkowego nie otrzymujemy już wartości null, tylko informację która została zawarta po słowie else, które właśnie oznacza, że w przypadku nie spełnienia wcześniejszych wyrażeń, ma wyświetlić komunikat, który się znajduje po tym słowie.  Wyrażenie warunkowe  case nie musi opierać się na wartościach tylko z jednej kolumny. Działa wtedy w ten sposób, że dla każdego wiersza sprawdza kolejne warunki i jeśli jakiś warunek okaże się prawdziwy, nie sprawdza już następnego warunku, tylko przeskakuje do kolejnego wiersza i dla niego sprawdza kolejne wyrażenia warunkowe.

select Name, listPrice, ProductCategoryID, ProductModelID, case

when ProductCategoryID=18 then ‘Kategoria Numer 18’

when ListPrice>1000 then ‘Drogi Produkt’

when ProductModelID>18 then ‘Numer Modelu większy od 18’

else ‘Inne’

end from SalesLT.Product;

57.jpg (742×437)

Na powyższym wyświetleniu na przykładzie wiersza numer 1 i 2 widać, że produkty te spełniłyby dwa warunki. Natomiast otrzymały tylko jeden komentarz z pierwszego warunku, co oznacza, że nie były one nawet sprawdzane pod kątem drugiego warunku.

Baner szkolenia Kompleksowe SQL w Microsoft SQL Server w JSystems, terminy gwarantowane

Szkolenie Kompleksowe SQL w Microsoft SQL Server →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Do czego służy wyrażenie CASE WHEN w SQL?
CASE zapewnia w zapytaniu funkcjonalność konstrukcji warunkowej typu when-then-else. Pozwala zwrócić różne wartości w zależności od spełnionego warunku, na przykład zamienić identyfikator kategorii na czytelny opis w osobnej kolumnie wyniku.
Co się dzieje, gdy nie użyję części ELSE w wyrażeniu CASE?
Jeśli żaden z warunków nie zostanie spełniony, a nie ma części ELSE, wynikiem dla danego wiersza jest wartość NULL. Część ELSE pozwala zamiast NULL zwrócić własny komunikat lub wartość domyślną dla pozostałych przypadków.
Czy CASE może sprawdzać warunki z wielu kolumn naraz?
Tak. W wersji z warunkami po słowie WHEN możesz odwoływać się do różnych kolumn, na przykład sprawdzać kategorię, cenę i numer modelu w kolejnych gałęziach. Nie jesteś ograniczony do jednej kolumny jak w prostszej wersji CASE.
Czy CASE sprawdza wszystkie warunki dla każdego wiersza?
Nie. Dla danego wiersza warunki sprawdzane są po kolei i przy pierwszym prawdziwym CASE zwraca jego wynik, po czym przechodzi do następnego wiersza. Dlatego wiersz pasujący do kilku warunków dostaje wartość tylko z pierwszego z nich.
Czy trzeba nadawać nazwę kolumnie z wyrażeniem CASE?
Nie trzeba, ale warto. Bez aliasu otrzymasz kolumnę bez nazwy. Dodanie aliasu, na przykład WarunekCase, sprawia, że kolumna wyniku ma czytelny nagłówek, co ułatwia odczytanie i dalsze użycie zapytania.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...