SQL (Structured Query Language), veritabanı yönetim sistemlerinde verileri yönetmek, sorgulamak ve işlemek için yaygın olarak kullanılan bir dildir. SQL fonksiyonl...
SQL Server'da CASE WHEN Kullanımı
SQL Server'da CASE WHEN yapısını bu yazımda inceleyeceğiz. CASE WHEN ile belirli koşullarda farklı çıktılar ya da işlemler yapabilmek için kullanabiliyoruz. SQL'de CASE WHEN ile ilgili farklı örnekler ile sorgular hazırladım. Var olan CASE WHEN dışında nasıl kullanabilirsiniz onlardan bahsetmeye çalıştım. Bu yazı sonunda CASE WHEN'i efektif olarak kullanabileceksiniz. Sizin de kullandığınız farklı CASE WHEN yapısı, mantığı var ise benim paylaşmaktan çekinmeyin.
Bu yazdığım sorguları Nortwind veri tabanı üzerinden yaptım. Veri tabanını indirmek için buraya tıklayabilirsiniz. Veri tabanını SQL Server üzerinden açıp script kodunu çalıştırabilirsiniz. SQL Server'da script dosyasını nasıl çalıştırılır bilmiyorsanız SQL Server Script Alma ve Çalıştırma adlı yazılımı inceleyebilirsiniz.
SQL CASE WHEN Kullanımı
CASE WHEN genel itibari ile koşulları yönetebilmek ve bunlar ile ilgili farklı çıktılar verebilmektir. Yapıda belli koşulları kontrol edebilmek için WHEN değimlerini kullanırız. Bu koşullar dışında bir durum gerçekleşti ise ELSE değimi ile ilgili çıktıyı verebiliriz. Örneğin birinin çalışma yılı 1 yıl ve altı ise %30 zam, 1 yıldan fazla çalışma yılı var ise %40 zamlı halini görmek istediğinizde CASE WHEN yapısını kullanabilirsiniz. Buna benzer ve daha farklı örneklere geçelim.
Basit CASE WHEN Kullanımı
SELECT
Country
,CASE
WHEN Country = 'USA' THEN 1
ELSE '0'
END AS CODE
FROM Employees e
Sayının 2'ye Tam Bölünme Durumunu Bulma
SELECT
CASE
WHEN 11 % 2 = 0 THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
END AS Sayi2YeTamBolunurMu
ISNULL İle Birlikte CASE WHEN Kullanımı
SELECT
e.Region RegionValue
,CASE
WHEN ISNULL(e.Region, 'YOK') = 'YOK' THEN 'Region Yok'
WHEN ISNULL(e.Region, 'YOK') <> 'YOK' THEN e.Region
END RegionStatus
FROM Employees e
CASE WHEN Yapısı Farklı Kullanımı
SELECT
e.TitleOfCourtesy TitleOfCourtesyValue
,CASE e.TitleOfCourtesy
WHEN 'Mr.' THEN 'Erkek'
WHEN 'Mrs.' THEN 'Kadın'
ELSE 'Tanımlanamadı'
END Cinsiyeti
FROM Employees e
İç içe CASE WHEN Yapısı Kullanımı
SELECT
e.TitleOfCourtesy + ' ' + e.FirstName + '' + e.LastName Person
,YEAR(GETDATE()) - YEAR(e.BirthDate) Age
,CASE
WHEN e.TitleOfCourtesy = 'Mr.' THEN CASE
WHEN (YEAR(GETDATE()) - YEAR(e.BirthDate)) >= 65 THEN 'Erkek kategorisinde emekli olabilir'
WHEN (YEAR(GETDATE()) - YEAR(e.BirthDate)) < 65 THEN 'Erkek Erkek kategorisinde emekli olamaz'
END
WHEN e.TitleOfCourtesy = 'Mrs.' THEN CASE
WHEN (YEAR(GETDATE()) - YEAR(e.BirthDate)) >= 63 THEN 'Kadın kategorisinde emekli olabilir'
WHEN (YEAR(GETDATE()) - YEAR(e.BirthDate)) < 63 THEN 'Kadın kategorisinde emekli olamaz'
END
ELSE 'Tanımsız unvan'
END EmekliDurumu
FROM Employees e
Koşulu Sağlayanların Sayısını Bulma
SELECT
COUNT(CASE
WHEN Country = 'USA' THEN 1
END) AS USACount
,COUNT(CASE
WHEN Country = 'UK' THEN 1
END) AS UKCount
FROM Employees
İlgili Duruma Göre CASE WHEN İle Sıralama Yapma
SELECT
*
FROM Employees e
ORDER BY (CASE
WHEN e.Region IS NULL THEN e.City
ELSE e.Country
END)
Koşula Göre Aynı Sütun İçerisinde İki Farklı Sıralama Yapma
SELECT
*
FROM Employees e
ORDER BY CASE
WHEN e.Extension > 1000 THEN e.Extension
END DESC,
CASE
WHEN e.Extension < 1000 THEN e.Extension
END ASC
Genel itibari ile CASE WHEN ile ilgili farklı kullanımlar ile sizlere aktarmaya çalıştım. CASE WHEN oldukça yaralı olsa da çok fazla kullanıldığında performansı da etkileceyektir. Bu her zaman göz önünde bulundurulmalıdır.
Umarım faydalı olmuştur. İyi çalışmalar.
Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.