Inspiracja , wiedza , realizacja
Jsystems

W przebudowie

Login



Java

Oracle

Linux

Android

PostgreSQL

Microsoft SQL Server

Wyrażenie warunkowe CASE

Rafał Czarkowski
Data dodania: Jun 21, 2016
Data aktualizacji: Jun 21, 2016


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;




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;




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;



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.