CASE ifadesi, SELECT ifadesinin verileri manipüle etme özelliğini yukarılara taşır. Sorgu yazarken bir sütundaki değeri genellikle başka bir değerle değiştirmeniz gerekir. Gerçek hayatta ise, CASE genellikle bir sütunda tutulan anlaşılması zor verilerin daha anlamlı hâle getirilmesi için kullanılır.

CASE ifadesi birden çok koşullu mantığa dayalı ifadeden bir skaler değer döndürür. Skaler değer, tek bir değerin gerektiği her yerde kullanılabilir. SELECT ifadesinin yanı sıra CASE ifadeleri WHERE, HAVING ve ORDER BY ifadelerinde de kullanılabilir.

SELECT İfadelerinde CASE Kullanımı

T-SQL’de CASE ifadeleri tek veya skaler bir değer döndürür. Diğer bazı programlama dillerinin aksine T-SQL’de CASE ifadeleri bir statement değildir ve program akış kontrolünü de belirtmezler. Bunun yerine, bir ifadenin sonucunu döndürmek için SELECT ve diğer ifadelerle birlikte kullanılırlar. Hesaplanan sütunlar sonuç olarak görünür ve netlik için de takma ad kullanılması iyi olur.

T-SQL sorgularında, kaynak tabloda bulunan bir değere başka bir alternatif değer sağlamak için CASE ifadeleri kullanılır. Örneğin, kayıtlı küçük bir sayısal kod için kolay okunan bir metin adı sağlamak için CASE ifadesi kullanılabilir.

CASE Formları

T-SQL’de, CASE ifadeleri iki formdan birini alabilir: Simple CASE veya Searched (Boolean) CASE.

Bu bölümün konusu olan Simple CASE işleminde bir input değeri sıradaki olası case ifadesinde bulunan değerle karşılaştırılır:

  • Bir eşleşme bulunursa, bulunan eşleşme değeri CASE ifadesinin sonucu olarak döndürülür. Diğer eşleştirmelere gerek kalmaz.
  • Eşleşme bulunmazsa, ELSE ifadesindeki değer döndürülür.
  • Eşleşme bulunmazsa ve ELSE ifadesi de yoksa, NULL değeri döndürülür.

Örneğin aşağıdaki CASE ifadesi Production.Categories tablosunda bulunan categoryid değeri için açıklayıcı bir kategori isimledirmesi yapılmıştır:

SELECT productid, productname, categoryid,
 CASE categoryid
 WHEN 1 THEN 'Beverages'
 WHEN 2 THEN 'Condiments'
 WHEN 3 THEN 'Confections'
 ELSE 'Unknown Category'
 END AS categoryname
FROM Production.Categories 

Dönen sonuç:

productid productname categoryid categoryname
--------- ------------ ---------- ---------------------
101 Tea 1 Beverages
102 Mustard 2 Condiments
103 Dinner Rolls 9 Unknown Category 

Searched (Boolean) CASE ifadeleri ise, bir input değerini bir dizi predicate veya ifadelerle karşılaştırır. Bu ifade bir değer aralığı içerebilir. Dönecek olan değer, Simple CASE ifadesindeki gibi THEN ifadesinde bulunmaktadır.

Kaynak:
CASE (Transact-SQL)