Son Haberler
Anasayfa / Yazılım / SQL / CASE Fonksiyonu

CASE Fonksiyonu

CASE fonksiyonu programlama dillerinde kullanılan Switch, Swtich Case, Select Case yapılarına benzemektedir. Aynı işlebi yapmaktadır diyebiliriz aslında. Tabi burada karar yapısı bir sonuca ulaştırmayacak ama herhangi bir şartı sağlayan veriyi istediğimiz şekilde gösterebilmemize olanak sağlamaktadır. SQL’de CASE fonksiyonu iki şekilde kullanılır. Bunlar simple Case ve searched case olarak adlandılır.

Simple Case : Basit CASE fonksiyonu genelde şu amaç için kullanılır. Mevcut bir veri satırında yer alan değerin daha sonra istediğimiz şekilde görüntülenmesini sağlayabiliriz. Kullanım olarak kalıbı :

CASE testifadesi
WHEN karşılaştırılacak ifade 1 THEN Bunun Geri Dönüş Değeri
WHEN karşılaştırılacak ifade 2 THEN Bunun Geri Dönüş Değeri
ELSE karşılaştırılacak son değer END AS kolonbaşlığı

Şimdi olayı örnekleyelim. Böylelikle daha net anlaşılacak. AdventureWorks veritabanı üzerinde çalışıyorum.

SELECT Title, CASE Title 
WHEN 'Mr.' THEN 'Bay'
WHEN 'Ms.' THEN 'Bayan'
WHEN 'Mrs.' THEN 'Bayan'
WHEN 'Miss' THEN 'Bayan'
ELSE 'Bilinmiyor' END AS Cinsiyet
FROM Person.Person
WHERE BusinessEntityID IN (1,3,5,6,345,357,423)

Person.Person tablosunda BusinessEntityID alanı değeri 1,3,5,6,345,357,423 olanların Title değeri Mr. ise Bay, Ms. ise Bayan, Mrs. ise Bayan, Miss ise bayan diğer durumlarda ise Bilinmiyor yazdırdım.

300101

Searched Case : Searched Case eğer ifadeler oldukça karışık ise başvurulan bir yöntemdir. Kullanım kalıbı :

CASE WHEN test edilecek ifade1 THEN değer1
WHEN test edilecek ifade 2 THEN değer 2
ELSE değer3 END

Örnekleyelim.

SELECT Title, CASE WHEN Title IN ('Ms.','Mrs.','Miss') THEN 'Bayan'
WHEN Title = 'Mr.' THEN 'Erkek' ELSE 'Bilinmiyor' END AS Cinsiyet
FROM Person.Person WHERE BusinessEntityID IN (1,3,5,6,345,357,423)

Görüldüğü gibi bu sefer benzer şartlar aynı sonucu vereceği için bunları IN deyimi ile birlikte kullandım. Yani CASE fonksiyonunun searched edilmiş yani aranmış hali.. Aynı şekilde burada da Person.Person tablosunda BusinessEntityID alanı değeri 1,3,5,6,345,357,423 olanların Title değeri Mr. ise Bay, Ms. ise Bayan, Mrs. ise Bayan, Miss ise bayan diğer durumlarda ise Bilinmiyor yazdırdım. Dolayısı ile sonuçlarım aynı.

300101

Buradaki arama şöyle çalışıyor. Öncelikle ilk belirtilen değere bakılıyor yani bizim sorgumuzda Ms. eğer bu yoksa ikincisine geçiyor, Mrs. eğer bu da yoksa sırası ile sağa doğru devam ediyor. Eğer hiç biri yoksa bu sefer ELSE ile belirtilen kısım çalışıyor.

CASE ile karşılaştırma yapmak : CASE deyimi ile karşılaştırma da yapabiliriz. Örneğin şöyle bir tablonuz olduğunu düşünün. Tabloda seyehat bilgileri yer alıyor. İşte seyahat bilgilerinden kolonun birinde otelde kalma süresi bir diğeri yolda geçecek süre. Bu iki alandan hangisi büyük veya hangisi küçük bunu seçip ayrı bir kolonda tıpkı yeni bir tablo gibi ya da yeni oluşturulmuş bir alan gibi gösterebiliriz.

AdventureWorks veritabanı üzerinde HumanResources.Employee tablosunda VacationHours ve SickLeaveHours alanlarını karşılaştırıp büyük olan değeri ayrı bir kolonda listeleyelim.

SELECT VacationHours, SickLeaveHours, CASE WHEN VacationHours > SickLeaveHours
THEN VacationHours ELSE SickLeaveHours END AS 'Büyük Değer' FROM HumanResources.Employee

300102

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir