SQL CASE Fonksiyonu Kullanımı
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 DurumuFROM 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 DurumWHEN 0 THEN 'Kapalı' WHEN 1 THEN 'Açık'
ELSE 'Belirsiz' END AS DurumuFROM 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' Durum = 2 THEN 'Beklemede' Durum = 3 THEN 'İptal' ELSE 'Belirsiz' END AS DurumuFROM 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 BirimFiyatBilgisiFROM 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: