Użycie funkcji CASE


Funkcja CASE jest bardzo przydatnym rozwiązaniem T-SQL. Dzięki tej funkcji można zastąpić oryginalną wartość kolumny inną. Prostym sposobem jej wykorzystania może być sytuacja gdy w tabeli mamy wartości 0-1 jak aktywne i nie, a chcemy je zastąpić tekstem.


Funkcja CASE pozwala sprawdzić wartość kolumny w wierszu w oparciu o różne kryteria, z których każdy kryterium może zwrócić inną wartość. Pozwala na stosowanie tych samych warunków jak w klauzuli WHERE. Pierwszym wyrażenie, które ma wartość true będzie wartość zwracana przez funkcję CASE. Składnia funkcji CASE.

Dla wartości
CASE expression
WHEN when_value THEN result
[ ...n ]
[
ELSE else_result ]
END

Dla wyrażeń
CASE
WHEN expression THEN result
[ ...n ]
[
ELSE else_result ]
END


W pierwszym przypadku funkcja case sprawdza czy wyrażenie jest równe podanym wartością jeśli tak zostanie zwrócona pierwsza wartość.

create table #dane (lp int identity(1,1), wartosc int, nazwa nvarchar(50), active int default 1)

insert into #dane (wartosc,nazwa) select 12,'Auto'
insert into #dane (wartosc,nazwa) select 11,'Szafa'

select case wartosc when 12 then 'jest rowne 12' else 'niejest rowne 12' end

from #dane
drop table #dane

go

-------------------------------
jest rowne 12
niejest rowne 12


W drugim funkcja CASE sprawdza czy kolumna lub wyrażenie spełnia kryteria, kryteria są podawane tak jak w klauzuli WHERE.

create table #dane (lp int identity(1,1), wartosc int, nazwa nvarchar(50), active int default 1)

insert into #dane (wartosc,nazwa) select 12,'Auto'
insert into #dane (wartosc,nazwa) select 11,'Szafa'
insert into #dane (wartosc,nazwa) select 10,'Sejf'

select case when wartosc >12 then '>12' 
	   when wartosc=12 then '12'	
	   when wartosc <12 then '<12' end,
	   	case when wartosc =12 and nazwa = 'AUto' then 'To jest auto wartość 12' end

from #dane
drop table #dane


go


-----------------------
12 To jest auto wartość 12
<12 NULL
<12 NULL


Użycie funkcji CASE i LIKE


Funkcja CASE pozwala nam równie na poszukiwanie wzorca przy użyciu LIKE oraz wyrażeń regularnych.

create table #dane (adres nvarchar(50),tel nvarchar(50))

insert into #dane select 'warszawa ul. polana 13 01-001','022-2568452'
insert into #dane select 'kraków ul. krakowska 11 12-125','048-2568452'

select 
case when adres like '%warszawa%' then 'Warszawa' end,
case when tel like '0[0-2][0-2]%' then 'kierunkowy od 0 do 22' end
from #dane
drop table #dane

go


------------------------------------
Warszawa kierunkowy od 0 do 22
NULL NULL

Transpozycja z funkcją CASE



Funkcja CASE pozwala również na napisanie prostej transpozycji czyli zamiany wierszy na kolumny.

create table #dane (miesiac nvarchar(50),wartosc int)

insert into #dane select 'Styczen',10
insert into #dane select 'Luty',121
insert into #dane select 'Marzec',1
insert into #dane select 'Kwiecieñ',15
insert into #dane select 'Maj',126
insert into #dane select 'Czerwiec',5

select * from #dane 
select 
case miesiac when 'Styczen' then sum(wartosc) end [I],
case miesiac when 'Luty' then sum(wartosc) end [II],
case miesiac when 'Marzec' then sum(wartosc) end [III],
case miesiac when 'Kwiecieñ' then sum(wartosc) end [IV],
case miesiac when 'Maj' then sum(wartosc) end [V],
case miesiac when 'Czerwiec' then sum(wartosc) end [VI]
from #dane group by miesiac
drop table #dane


go

------------------------------------------------------
I II III IV V VI
NULL NULL NULL NULL NULL 5
NULL NULL NULL 15 NULL NULL
NULL 121 NULL NULL NULL NULL
NULL NULL NULL NULL 126 NULL
NULL NULL 1 NULL NULL NULL
10 NULL NULL NULL NULL NULL

Użycie funkcji CASE w WHERE



Funkcji case możemy użyć równie w klauzuli where stosując warunki dla naszych nowych wartości pochodzących z funkcji CASE.

create table #dane (lp int identity(1,1), wartosc int, nazwa nvarchar(50), active int default 1)

insert into #dane (wartosc,nazwa) select 12,'Auto'
insert into #dane (wartosc,nazwa,Active) select 11,'Szafa',0

select *
from #dane
WHERE
Case active when 1 then 'A' else 'D' end = 'A'
drop table #dane

go


Zmiana kolejności sortowania z użyciem funkcji CASE T-SQL



Idąc tropem where i CASE możemy łatwo odkryć, że funkcji CASE możemy również użyć w ORDER BY pozwala nam to naprzykład na zmianę kolejności sortowania wyniku.

create table #dane (lp int identity(1,1),miesiac nvarchar(50),wartosc int)

insert into #dane select 'Styczen',10
insert into #dane select 'Luty',121
insert into #dane select 'Marzec',1
insert into #dane select 'Kwiecieñ',15
insert into #dane select 'Maj',126
insert into #dane select 'Czerwiec',5

select * from #dane order by case when miesiac = 'Styczen' then 99 else lp end


drop table #dane

go





Podsumowując funkcja CASE w T-SQL jest bardzo potężnym narzędziem pozwalającym na generowanie różnych wartości na podstawie innych. Przy odrobienie wyobraźni może się stać bardzo użyteczna.

powrót















SQL-KURSY.pl poleca:

Książki
ksikaksikaksikaksikaksika

Copyright 2010-2011mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional

Strona internetowa wykorzystuje pliki cookie zapisywane w pamięci przeglądarki internetowej.

OK