Instrukcja CASE w SQL Server

W jaki sposób korzystać z Select CASE w SQL Server?

CASE w SQL Server to instrukcja wyboru porównywalna do instrukcji warunkowej IF THEN ELSE w innych językach programowania. W jaki sposób z niej skorzystać? CASE w SQL możemy wykonać na dwa sposoby. Poniżej przedstawiam schematy działania instrukcji. Pierwsza konstrukcja CASE polega na przypisaniu wyniku do wartości.

CASE wartość_lub_nazwa_kolumny
WHEN wartość_1 THEN wynik_1 
WHEN wartość_2 THEN wynik_2 
WHEN wartość_n THEN wynik_n 
[ ELSE wynik_gdy_zaden_z_warunków_nie_jest_spełniony ]
END

Na bazie AdventureWorks możemy wykonać przykładowe działania przypisując wartość na podstawie kolumny Name w tabeli [Production].[Culture]. Nasz Case będzie tłumaczył wartości z kolumny Name na język polski. Dla wartości innych niż zdefiniowane chcemy uzyskać wartość „Inny” :

use AdventureWorks2014
go

SELECT CultureID
      ,Name
      ,ModifiedDate
       ,CASE a.name
  when 'English' then 'Angielski'
  when 'Spanish' then 'Hiszpański'
  when 'French' then 'Francuski'
  else 'Inny'
END AS NAZWA_POLSKA
FROM [Production].[Culture] a;
;

Druga konstrukcja CASE polega na obliczeniu wyniku na podstawie wyrażeń logicznych.

CASE
     WHEN wyrażenie_logiczne_1 THEN wynik_1
     WHEN wyrażenie_logiczne_2 THEN wynik_2
     WHEN wyrażenie_logiczne_n THEN wynik_n
     [ ELSE wynik_gdy_zaden_z_warunków_nie_jest_spełniony ] 
END

Stwórzmy identyczny przykład z użyciem tej konstrukcji do tłumaczenia wartości z kolumny Name.

use AdventureWorks2014
go

SELECT CultureID
      ,Name
      ,ModifiedDate
  ,CASE 
     when a.name = 'English' then 'Angielski'
     when a.name = 'Spanish' then 'Hiszpański'
     when a.name = 'French' then 'Francuski'
     else 'Inny'
  END AS NAZWA_POLSKA
FROM [Production].[Culture] a;

Jak widzisz wynik obydwu zapytań jest taki sam. Stwórz kolejny przykład Case na bazie AdventureWork. Case na podstawie ceny w tabeli Production.Product określi jej słowny przedział np „do 50 USD”. Poniżej przykład:

USE AdventureWorks2014
GO

SELECT ProductNumber, 
       Name,
          CASE 
             WHEN ListPrice =  0 THEN 'nie na sprzedaż'
             WHEN ListPrice < 50 THEN 'Do $50'
             WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Do $250'
             WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Do $1000 '
          ELSE 'Powyżej $1000'
         END as PRZEDZIAL_CEN
FROM Production.Product
GO
Case w SQL Server - Jak używać instrukcji
Case w SQL Server – Jak używać instrukcji

Dodam, że Case możemy stosować także w innych klauzulach niż Select. Możemy użyć Case w klauzuli WHERE, a nawet w klauzuli FROM, HAVING, czy ORDER BY o czym dowiesz się w dalszej części tego kursu SQL Server.

Źródło: Microsoft

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *