Instrukcje warunkowe CASE i IIF

 

Artykuł ten jest częścią serii Od 0 do TSQL, którą znajdziesz tutaj.

Dzisiejszym tematem w ramach serii Od 0 do TSQL będzie instrukcja CASE  oraz funkcja IIF. Służą one do tworzenia tak zwanych instrukcji warunkowych – czym one są oraz jak ich użyć opowiem w dalszej części niniejszej publikacji.

Czasem w naszym zapytaniu chcemy dodać kolumnę, która będzie zawierała określone wartości w zależności od jakiegoś warunku np. jeżeli ktoś jest w wieku od 1 do 10 lat to przypisz mu wartość “Dziecko”, jeżeli mieści się w przedziale od 11 do 19 lat to przypisz mu wartość “Nastolatek” i tak dalej. Właśnie do implementacji tej logiki służą wymienione powyżej konstrukcje. Są one bardzo proste w użyciu co postaram się zobrazować na konkretnym przykładzie.  Ogólna składnia CASE wygląda następująco:

Gdzie jako ColumnName podstawiamy kolumnę z naszej tabeli, tam gdzie Value podstawiamy wartość jakiej oczekujemy w tej kolumnie, a w Return Value wartość jaka ma być zwracana w przypadku wystąpienia tej wartości. Możemy się również zabezpieczyć na wypadek gdy wartość w kolumnie nie będzie pasować do żadnej z podanych wartości w sekcji WHEN – wtedy możemy przypisać jej wartość z sekcji ELSE. Powyższy przypadek użycia zobrazujemy na przykładzie tabeli Employees z bazy Northwind.

Result

Powyższe zapytanie sprawdza kolumnę Doscontinued i jeżeli występuje wartość 0 to zwraca słowo “No” w przeciwnym wypadku zwraca słowo “Yes”. Zapytanie to można by również zapisać w inny sposób tj. bez ELSE – w tym wypadku rezultat byłby ten sam:

Istnieje jeszcze drugi sposób użycia CASE – ogólna składnia tego przypadku została przedstawiona poniżej:

W tym wypadku zamiast podawać statyczne wartości w WHEN możemy podać wyrażenie. Poniższy przykład zwraca kategorię cenową produktu na podstawie ceny.

Result

W bardzo podobny sposób działa funkcja IIF. Zaimplementujmy powyższy przykład z kategoriami cenowym z wykorzystaniem IIF.

Rezultat otrzymany w wyniku wykonania powyższego zapytania jest dokładnie taki sam jak w zapytaniu z CASE. Różnica jest taka, że w tym przypadku musieliśmy zagnieździć funkcję IIF dwukrotnie co oczywiście może zmniejszać czytelność kodu. Myślę, że dobrze jest używać IIF tylko wtedy gdy mamy do dyspozycji tylko 2 możliwości, w innym wypadku lepiej używać CASE.

Jak widać użycie instrukcji warunkowych daje nam wiele możliwości w kwestii dostosowania naszych zapytań TSQL. W następnym epizodzie zapoznamy się z typami danych w SQL Server, które mają bardzo duży wpływ na nasze zapytania – ZAPRASZAM!

Spis dostępnych artykułów w ramach sesji znajdziesz tutaj.

Adrian Chodkowski
Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

Leave a Comment

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