MSSQL komutlarından CASE herhangi bir sorgu sonucunda uygulanan alandan dönen değere göre farklı işlem yapılmasını veya farklı metin yazılmasını sağlar. Programlama dillerindeki IF komutuna benzemektedir.
Örneğin yukarıdaki öğrenci tablosunda cinsiyet alanında ERKEK için E, KADIN için K harfi kullanılmıştır. Eğer listeleme esnasında E ve K yerine daha anlamlı olan ERKEK ve KADIN yazmasını istiyorsak CASE ifadesini kullanılır.
1 2 3 4 5 | SELECT ogrenci_ad, ogrenci_soyad, CASE cinsiyet WHEN ‘E’ THEN ‘ERKEK’ WHEN ‘K’ THEN ‘KADIN’ END AS Cinsiyet FROM ogrenci; |
Sayısal değerler üzerinde de işlem yapılabilir. Örneğin okul gezisi için öğrenci numaralarına göre öğrenciler gruplara ayrılacaktır. Öğrenci numarası 8 ve 8’dan küçükler GRUP A, 8’den 18’e kadar olanlar GRUP B, diğer öğrenciler GRUP C olacaktır.
1 2 3 4 5 6 | SELECT ogrenci_ad,ogrenci_soyad, CASE WHEN ogrenci_no>0 AND ogrenci_no<=8 THEN 'GRUP A' WHEN ogrenci_no>8 AND ogrenci_no<=18 THEN 'GRUP B' WHEN ogrenci_no>18 THEN 'GRUP C' END AS Grup FROM ogrenci; |
CASE ile istenilen alan üzerinde matematiksel hesaplamalar da yapılabilir. Hesaplama işlemleri aşağıdaki personel tablosu üzerinde yapılacaktır. Personel tablosunun oluşturma ve veri girişi hazır kodlarına Personel Tablosu Oluşturma başlıklı yazıdan ulaşabilirsiniz.
Örneğin maaşı 2500 ve 2500’den düşük olanlara %20, 2500 ile 3500 arasında maaş alanlara %15 ve 3500 ve 3500’den yüksek maaş alanlara %10 zam yapılması planlanmaktadır. Maaş zamları yapılmadan önce değişimlerin gözlenmesi için personellerin ad, soyad, eski maaş ve yeni maaş bilgilerini listeleyin.
1 2 3 4 5 6 7 | SELECT p_ad AS 'Personel ad',p_soyad AS 'Personel soyad', maas AS 'Eski maaş', CASE WHEN maas<=2500 THEN maas*1.20 WHEN maas>2500 AND maas<3500 THEN maas*1.15 WHEN maas>=3500 THEN maas*1.10 END AS 'Yeni maaş' FROM personel; |
Güzel olmuş