SQL CASE Nedir? Kullanımı Nasıldır?
SQL CASE komutu koşullardan oluşur ve ilk koşul karşılandığında bir değer döndürür. Bir koşul doğru olduğunda, okumayı durdurur ve sonucu gösterir. Hiçbir koşul doğru değilse, ELSE(yoksa) koşulundaki değeri döndürür
NOT: Yukarıda anlaşılır olması için türkçe karakter kullanılmıştır.Kod yazımlarında Türkçe karakter kullanmayınız
Aşağıdaki SQL koşulları tablo üzerinde geçerlidir ve koşul karşılandığında bir değer gösterir
WHEN Adet > 30 THEN ‘Adet 30’dan fazladır’
Aşağıdaki SQL müşterileri şehre göre sıralayacaktır. Ancak, Şehir Null ise, İsme göre sırala
Gündelik hayatta kalanların sonuçları veya parçalarının çoğu “koşullardan” oluşur. Örnek olarak hava yağmurluysa dışarı çıkarken şemsiyenizi veya güneşliyse güneş gözlüğü takıp dışarı çıkarsınız. Elinizdeki verileri ayrıntılarına göre yeniden düzenleyebilmek ve sorgulayabilmek için SQL’de CASE WHEN ifadesi kullanılır
Veri tabanı ile konuşma CASE WHEN ifadesi, birebir çeviri yapacak olursa olsun “durum bu olursa, o zaman şunu yap” anlamına gelir. Bu ifade, sorgulayıcı tarafından verilen belirli parçalara göre, her bir satırı değerlendirerek belli bir sonuç üretir
Örneğin 15 yaşını tamamlamış çocuğun kişiliğinde fotoğraf yer almaz. Bir kişinin kişiliğinde fotoğraf olması için 15 yaşında büyük olması şartı vardır.15 yaşında büyükse fotoğrafında fotoğraf olabilir. Eğer bilinmiyorsa. Bu durum durumda-ne zaman yapısıyla ifade etmek istersek
CASE WHEN bildirimi ile oluşan değerler her zaman tablosu içerisinde yeni bir sütunda kaydedilir
DURUM kolon_adi OLDUĞUNDA kosul_1 OLDUĞUNDA sonuc_1 OLDUĞUNDA kosul_2 OLDUĞUNDA sonuc_2 ……. ……. ……. OLDUĞUNDA kosul_n OLDUĞUNDA sonuc_n DEĞİLSE diger_sonucSON ;
Bu sözdizimini biraz daha detaylı inceleyelim
Şimdi nasıl kullanacağımızın bir örnek örneği
Öncelikle ‘musteri’ olarak bir tablo oluşturalım ve bu tabloya verileri girelim
CREATE TABLE musteri ( musteri_id int , cinsiyet varchar ( 255 ), toplam_harcama int );
Tablo hazır. Şimdi şimdi bu tabloya yapay veriler gireceğiz
musteri(musteri_id, cinsiyet, toplam_harcama) DEĞERLERE EKLEYİNİZ ( 1 , ‘Kadın’ , 10000 ), ( 2 , ‘Erkek’ , 25000 ), ( 3 , ‘Bayan’ , 30000 ) , (4 , ‘kadın’ , 45000 ), ( 5 , ‘Bayan’ , 32500 ), ( 6 , ‘Erkek’ , 16400 );
Artık basit CASE ifadesini kullanmak için hazırız. ‘cinsiyet’ değişkeninde yer alan değerleri standartlaştırılır
SELECT * , CASE cinsiyet WHEN ‘kadın’ THEN ‘KADIN’ WHEN ‘Ms.’ SONRA ‘KADIN’ NE ZAMAN ‘Bayan’ SONRA ‘KADIN’ NE ZAMAN ‘Kadın’ SONRA ‘KADIN’ BAŞKA ‘ERKEK’ musteri’den ‘cinsiyet_yeni’ OLARAK BİTER ;
Aramalı CASE WHEN kullanımında, basit CASE WHEN’e kıyasla beklenen bir değer vermek yerine (Ör: WHEN ‘Bayan’ THEN ‘Kadın’) gerçekleşmesi beklenilen bir koşulda belirlenir. Aynı örnek üzerinden koridorumuzda cinsiyeti “Kadın” olan kaydeder WHEN cinsiyet = “Kadın” THEN “KADIN” ağırlığını kullanarak düzenleyebiliriz
Basit ve Aramalı CASE ifadeleri arasındaki en belirgin fark, basit CASE’de üzerinde çalışmak sütunu CASE’den hemen sonra belirtmemiz gerekirken, Aramalı CASE de ise onu bir ifade için değişken sütununda belirtmemiz gerekir
Yukarıda yaptığımız örnek Aramalı CASE ifadesine göre yeniden düzenleyin
SELECT * , CASE WHEN cinsiyet = ‘kadın’ THEN ‘KADIN’ WHEN cinsiyet = ‘Ms.’ SONRA ‘KADIN’ NE ZAMAN cinsiyet = ‘Bayan’ SONRA ‘KADIN’ NE ZAMAN cinsiyet = ‘Kadın’ SONRA ‘KADIN’ BAŞKA ‘ERKEK’ musteri’den ‘cinsiyet_yeni’ OLARAK BİTİR ;
Yaptığımız örnek metin veri tipine sahip bir değişken üzerinden profil için her defasında değişken isimlendirme yerine basit CASE kalıbını kullanarak daha basit görünüyor. Ancak, özellikle dijital değerler üzerinde arama yapılırken CASE kalıbı kullanışlıdır
Biraz önceki örnek tablo üzerinden, toplam harcama 30 bin liradan fazla olan müşteriler “Özel Müşteri”, geri kalanları ise “Standart Müşteri” olarak kategorize ettik
SEÇİN *, VAKA NE ZAMAN toplam_harcama > 30000 SONRA ‘Özel Müşteri’ DİĞER ‘Standart Müşteri’ SON AS ‘musteri_tipi’musteri’den ;
Değişkende bulunan tüm dijital değerleri tek tek manuel olarak eşleştirmek hem mümkün hem de olmayacaktır. Bu nedenle, aranan CASE formülü bu senaryoda gayet kullanışlıdır
SQL’de CASE WHEN ifadeleri iç içe de kullanılabilir. İç içe kullanan ifadelerden dışta kalan ilk koşullu ‘dış ifade’ , kullanılan yer alan koşullu ise ‘iç ifade’ olarak isimlendirilir
İç içe CASE WHEN ifadelerinin çalışma mantığı ise dışarıdan içeride olacak şekildedir. Dışarıdaki ilk koşul doğru ise sıra içerideki koşula gelir
SEÇ * , CASE WHEN toplam_harcama > 30000 THEN ‘Özel Müşteri’ ELSE CASE WHEN cinsiyet = ‘KADIN’ THEN ‘Standart Kadın Müşteri’ ELSE ‘Standart Erkek Müşteri’ SON AS ‘musteri_tipi’ FROM musteri ;
İç içe CASE WHEN hayatı yazarken dikkat edilmesi gereken nokta SON ifadeleridir. END hayatta doğru şekilde olduğundan emin olmalıdır
(case Erp_QuotationReceipt.QuotationStatus when 1 then ‘Teklif’ when 2 then ‘Revize’ when 3 then ‘Karşı Teklif Bekleniyor’ when 4 then ‘Karşı Teklif Verildi’ when 5 then ‘Karşı Teklif Verilmedi’ ELSE ”END) as [Teklif Durum]
(case [Müşteri Temsilcisi] when’ALİ’ then 1 when ‘SERAP SEDEF’ THEN 2 ELSE ‘0’ END) as satis
case when [₺ Tutar] >500 then ‘güzel’ else ‘kötü’ end as durum



