T-SQL’de Case Statement Kullanımı

Standart

Case statement t-sql’de bir sorgu sonucu dönen bir kolonun değerine göre farklı işlemler yapabilmemizi sağlar. Mantık olarak programlama dillerindeki switch/case ifadesinden bir farkı yoktur. Basit bir örnekle açıklayacak olursak bir çalışan tablomuz olsun ve çalışan tablomuzun ID, isim ve maaş attributeları olsun. Yazdığımız basit bir sorguda maaş yerine belli bir miktarı açlık sınırı olarak belirleyip bu miktar altında kalanları açlık sınırı altı, bu miktara eşit olanları açlık sınırı ve üstünde maaş alan kisileri ise açlık sınırı üstü olarak nitelendirmek istiyoruz bu noktada Case statement kullanabiliriz. Yazılanlardan yola çıkarak basit bir örnek yapalım.

--Tablomuzu değişken olarak tanımlayıp dolduruyoruz

DECLARE @Calisan TABLE
(
ID int,
isim varchar(15),
maas decimal(8,2)
);

INSERT @Calisan VALUES
(1,'Rıfkı',1500),
(2,'Refik',2500),
(3,'Kamil',2700),
(4,'Fadime',2500),
(5,'Faik',1000),
(6,'Sıdıka',1200),
(7,'Mecnun',900),
(8,'Hande',2000),
(9,'Seval',90000),
(10,'Pınar',1250),
(11,'Onur',3400);

Açlık sınırımız 2500 lira olsun ve bu sınıra göre bize kişinin açlık sınırında veya bu sınırın altında yada üstünde olduğunu söyleyecek bir select sorgusu yazalım.

SELECT ID, isim,
CASE
WHEN maas < 2500 THEN 'Aclik siniri altinda' WHEN maas = 2500 THEN 'Aclik sinirinda' WHEN maas > 2500 THEN 'Aclik siniri ustunde'
END sinir_bilgisi --isimlendirdigimiz kisim
FROM @Calisan;
ID isim sinir_bilgisi
1 Rıfkı Aclik siniri altinda
2 Refik Aclik sinirinda
3 Kamil Aclik siniri ustunde
4 Fadime Aclik sinirinda
5 Faik Aclik siniri altinda
6 Sıdıka Aclik siniri altinda
7 Mecnun Aclik siniri altinda
8 Hande Aclik siniri altinda
9 Seval Aclik siniri ustunde
10 Pınar Aclik siniri altinda
11 Onur Aclik siniri ustunde

Yazdığımız sorgunun sonucunda kişilerin açlık sınırı bilgisini elde ettik. Ve bu sorguyu aşağıdaki gibi de yazabiliriz.

SELECT ID, isim,
CASE
WHEN maas < 2500 THEN 'Aclik siniri altinda'
WHEN maas = 2500 THEN 'Aclik sinirinda'
ELSE 'Aclik siniri ustunde'
END sinir_bilgisi
FROM @Calisan;

Birde ortalama maaş üzerinden hesaplama yapalım. AVG fonksiyonunu group by olmadan burada kullanamadığımızdan ortalama maaş değerini bir değişkene alıyoruz. Ve bu ortalama değeri karşılaştırmalarda kullanıyoruz.

DECLARE @Ortalama_maas decimal(8,2);

SELECT @Ortalama_maas = AVG(maas)
FROM @Calisan;

SELECT ID, isim,
CASE
WHEN maas < @Ortalama_maas THEN 'Ortalama altinda' WHEN maas > @Ortalama_maas THEN 'Ortalama ustunde'
ELSE 'ortalama'
END sinir_bilgisi
FROM @Calisan;

Sonuç aşağıdaki gibi olmaktadır.

ID isim Ortalama bilgisi
1 Rıfkı Ortalama altinda
2 Refik Ortalama altinda
3 Kamil Ortalama altinda
4 Fadime Ortalama altinda
5 Faik Ortalama altinda
6 Sıdıka Ortalama altinda
7 Mecnun Ortalama altinda
8 Hande Ortalama altinda
9 Seval Ortalama altinda
10 Pınar Ortalama altinda
11 Onur Ortalama altinda

Yorum bırakın