SQL CASE Fonksiyonu Kullanımı

Mart 02, 2017 Mustafa BÜKÜLMEZ 0 Yorum



CASE fonksiyonu  programlama dillerinde kullanılan Switch, Swtich Case, Select Case yapılarına benzemektedir. Herhangi bir şartı sağlayan veriyi istediğimiz şekilde gösterebilmemize olanak sağlamaktadır. SQL’de CASE fonksiyonu iki şekilde kullanılır. Bunlar simple Case ve searched case olarak adlandılır.

Simple Case : Basit CASE fonksiyonu mevcut bir veri satırında yer alan değerin daha sonra istediğimiz şekilde görüntülenmesini sağlar. Kullanımı :

CASE testifadesi
WHEN karşılaştırılacak ifade 1 THEN Bunun Geri Dönüş Değeri
WHEN karşılaştırılacak ifade 2 THEN Bunun Geri Dönüş Değeri
ELSE karşılaştırılacak son değer END AS kolonbaşlığı

İnceleyelim:


1
2
3
4
5
6
7
8
SELECT
Not,
CASE Not
WHEN 0 THEN 'KALDI'
WHEN 50 THEN 'GEÇTİ'
ELSE 'Not Girilmemiş' END AS Durumu
FROM Ogrenciler

Yukarıda gördüğünüz gibi Ogrenciler tablosundaki not kolonu üzerinden yeni bir sanal kolon oluşturup not kolonundaki verilere göre belirli tanımlamalar yaptık. Bir örnek daha yapalım;


1
2
3
4
5
6
7
8
SELECT
CASE Durum
WHEN 0 THEN 'Kapalı'
WHEN 1 THEN 'Açık'
WHEN 2 THEN 'Beklemede'
WHEN 3 THEN 'İptal'
ELSE 'Belirsiz' END AS Durumu
FROM Talepler

Bu örneğimizde de Talepler tablosundaki durum kolonuna kaydettiğimiz verilerin anlamlarını göstermiş olduk. Projeyi hazırlayanlar olarak biz sayılara bakarak kaydın durumunu anlarız ancak kullanıcılar bilemez. Bunu başka bir tablo açıp iç içe select ile de yapabilirdik (linkte ilgili dersim bulunmaktadır.) ancak bu da bir yöntemdir.


Searched Case : Searched Case eğer ifadeler oldukça karışık ise başvurulan bir yöntemdir. Kullanımı;

CASE 
WHEN test edilecek ifade1 THEN değer1
WHEN test edilecek ifade2 THEN değer 2
ELSE değer3 END 

AS KolonBasliği


Görelim.
1
2
3
SELECT Not, CASE WHEN Not < 50 THEN 'Kaldı'
WHEN Not >= 50 THEN 'Geçti' ELSE 'Not Girilmemiş' END AS Durumu
FROM Ogrenciler

Örnekte gördüğünüz gibi simple case'e göre biraz daha karışık ancak bunu daha çok kullanıyoruz. En azından ben bunu kullanıyorum. 

Bir örnekle daha görelim


1
2
3
4
5
6
7
8
SELECT
CASE
WHEN Durum = 0 THEN 'Kapalı'
WHEN Durum = 1 THEN 'Açık'
WHEN Durum = 2 THEN 'Beklemede'
WHEN Durum = 3 THEN 'İptal'
ELSE 'Belirsiz' END AS Durumu
FROM Talepler


Simple Case'e bakıldığında bir kolondaki veriler ile işlem yapıyoruz. Anlamsal olarak baktığımızda sadece eşit(=) olanlara göre işlem yapılıyor. Daha da açacak olursak;

Durum (Kolon)
0 ise Kapalıdır
1 ise Açıktır
2 ise Beklemededir.

Ancak Searched Case de durum bu şekilde değil. Yukarıdaki gibi açıp inceleyelim;

Durum = 1  Kapalı (Durum 1 ise kapalı)
Durum = 2  Açık (Durum 2 ise açık)
Durum = 3  Beklemede (Durum 3 ise beklemede)
Durum > 3  İşleme Alınmadı (Durum 3 den büyükse işleme alınmadı) (4,5,6,7,.....)
Durum < 1  Belirlenmedi ( Durum 1 den küçükse belirlenmedi) (0,-1,-2,-3,...)

Yukarıda gördüğünüz gibi Searched Case'de her when ifadesinden sonra bir şarta göre tanımlama yapılabilir. Bu tanımlamayı istediğimiz şarta göre yapabiliriz çünkü  Searched Case'de sadece eşit(=) olanlara değil istediğimiz şartlara uyan verileri ARIYORUZ bu yüzden  Searched Case oluyor :D


CASE ile karşılaştırma yapmak : CASE fonksiyonu ile karşılaştırma da yapabiliriz. Kullanım şekillerini zaten yukarıda anlattık. Bunu da hemen bir örnek üzerinde gösterelim.


1
2
3
4
5
6
7
8
SELECT
EskiBirimFiyat ,
SonBirimFiyat ,
CASE
WHEN EskiBirimFiyat > SonBirimFiyat THEN SonBirimFiyat
ELSE EskiBirimFiyat END AS BirimFiyatBilgisi
FROM Urunler

Yukarıda bir karşılaştırma örneği verdik. Hemen inceleyelim.

Urunler tablomuzda  EskiBirimFiyat ve SonBirimFiyat  adlı 2 fiyat bilgisi tutan kolonumuz var.
Sorgumuza göre;

Eğer  EskiBirimFiyat, SonBirimFiyat'tan büyük ise yeni bir sanal kolona  SonBirimFiyat'ı yazacak değilse EskiBirimFiyat'ı yazacak. Yani yeni sanal kolonumuza en düşün fiyatı almış olacağız. Bunun üzerinden daha karmaşık işlemler de yapabiliriz. Örneğin eski birim fiyatı ile son birim fiyatı arasındaki farka bakıp % ne kadar zam gelmiş yada % ne kadar indirim gelmiş bulabiliriz.

Diğer SQL derslerimi de göz atabilirsiniz. ;)

Bu dersimizde bu kadar arkadaşlar. 
Diğer derslerimizde görüşmek üzere.

Bol Kodlu Günler.

https://mustafabukulmez.com/




0 Yorum: