Sql cümlelerimiz içinde belirli durumlara göre farklı işlemler yapmak istiyorsak Case-When yapısını kullanabiliriz. kullanımı
CASE
WHEN durum1 THEN yapılacaklar
WHEN durum2 THEN yapılacaklar
ELSE yapılacaklar
END
Bir örnek ile açıklamak istersek; veri tabannda statu isminde bir alanımız olduğunu ve bu alanın kişinin medeni halini tuttuğunu düşünelim. statü alanımzda “1″ evli, “2″ bekar “3″ de belirtilmedi anlamına gelsin. Biz eğer sorgu sonucunda statü durumunu 1,2,3 olarak değilde evli, bekar, belirtilmemiş olarak görmek istiyorsak sorgumuzu şu şekilde düzenleyebiliriz :
SELECT ADI, SOYADI,
CASE
WHEN STATU = 1 THEN ‘EVLİ’
WHEN STATU = 2 THEN ‘BEKAR’
ELSE ‘BELİRTİLMEMİŞ’
END AS STATU
FROM TABLOM




Bunlar da Oracle için örnekler –
http://psoug.org/reference/decode_case.html#case
Paylaşalım
Selamlar,
abi ben ana sayfaya tıkladığımda paylaşaım kısmı açılıyor, neden acaba?
Hörmetler.
paylaşalım sayfasını ana sayfa olarak ayarlamıştım o yüzden
Paylaşım için teşekürler gerçekten faydalı bir bilgi
Sonunda birisini şu case yi doğru anlatmış. Teşekkür ederim.
Oldukça açıklayıcı olmus.
teşekkürler.
işine yaramasına sevindim, kolay gelsin.
http://www.yazilimmutfagi.com/MakaleOku.aspx?Makale=Sql+Server+da+Case+Fonksiyonu+ve+Kullan%C4%B1m+%C3%96rnekleri&MakaleKey=3b9fea6a-0ca1-41eb-93ac-6ed754e0f9dd
yukarıdaki linkte detaylı bir anlatım var
merhaba
çıkamadım içinden.
SELECT* FROM HULYA_DENEME WHERE SURNAME LIKE ‘%yunus%’ OR DETAIL LIKE ‘%yunus%’ OR NAME LIKE
‘%yunus%’
bu sorgu surname,detail,name alanlarının içinde yunus geçenleri çekiyo çektiği sorgunun mesela önce where kısmına bakarsak ilk surnamede lıke geçenleri listelesin sonra detail alanında sonra name alanında.where kısmında ne kadar alan olursa olsun yazıldıgı sırayla bulunsun.Case yapısı ile nası yapabilirim yardımcı olursanız sevinirim.(normal şarta databasede hangisi ilk kayıt edildiyse o sırayı esas alıyo)
aklıma gelen ilk çözüm tek bir sorgu yerine 3 sorgu yazıp union ile birleştirmek oldu. ilki surname de like ile arama yapar, ikinci sorgu deteail alanında like ile arama yapar üçüncü sorguda name de arama yapar ve çıkan 3 sonuç birleştirilir.
o şekilde olmaz.Çünkü where kısmında onlarca kayıt oldugunu düşünün.
dediğiniz şekildede sonuç vermedi.
Sql sorgularında ORDER BY yetersiz kalabiliyor.
Ancak ORDER BY ile birlikte CASE WHEN kullanarak kayıtlarımızı istediğimiz şekilde sıralamak mümkün.
Örneğin: NAME alanının içinde x geçenler önce DETAIL alanının içinde geçenler en sonda gözüksün gibi şartlandırmaları CASE WHEN kullanarak yapabiliriz.
SELECT *
FROM DENEME
WHERE
NAME LIKE ‘%x%’OR
SURNAME LIKE ‘%x%’OR
DETAIL LIKE ‘%x%’
ORDER BY
CASE ‘x’
WHEN NAME THEN 1
WHEN SURNAME THEN 2
WHEN DETAIL THEN 3
END
deneme şansım olmadı ama sanki bu kullanım bütün alanları case den çıkacak sonuca göre sıralarmış gibi görünüyor, gruplama yapmadan.
Daha detaylı anlatım;
http://psoug.org/reference/decode_case.html#case
(ing)
o linki ilk commentte Tonguç bey vermişti zaten ama yinede paylaşım için teşekkür ederim.