Yandex Metrica
SQL Server'da CASE WHEN Kullanımı - Yasin Sunmaz

Yasin Sunmaz

Kodladıkça değişen bir dünya...

SQL Server'da CASE WHEN Kullanımı

08.01.2023 yasinsunmaz 108 0

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.

Diğer Yazılar

SQL Server Sequence Kullanımı

14.01.2023 yasinsunmaz 96 0

Veritabanında yeni keşfettiğim Sequence özelliğini sizlerle paylaşmak isterim. Squence genel olarak belirli değerler arasında numeric ve sıralı sayılar üretir. ...

SQL Server OUTPUT Kullanımı Silinen Kaydın Bilgilerini Geriye Döndürme

11.01.2023 yasinsunmaz 122 0

Bu yazımda SQL Server'da OUTPUT ile DELETED komutunun yapısını inceleyeceğiz. Kayıtlar üzerinde yapılan silme işlemlerinde, kaydın bilgilerin...

SQL Server OUTPUT Kullanımı Eklenen ve Düzenlenen Kaydın Bilgilerini Geriye Döndürme

09.01.2023 yasinsunmaz 89 0

Bu yazımda SQL Server'da OUTPUT ile INSERTED komutunun yapısını inceleyeceğiz. Yeni bir kayıt ekleme ya da üzerinde değişiklik yapılan işlemlerde, kayd...

Conversion Failed When Converting The Nvarchar Value 'xxxx' to Data Type Int Hatası Çözümü

20.09.2022 yasinsunmaz 162 0

SQL Server'da önceden oluşturulmuş olan bir view'de bir zaman sonra veri getiremediğini ve Conversion Failed When Converting The Nvarchar Value '   ...