Yazılım

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