Sql de Case-When Yapısı

14 12 2007

ilgili yazının güncel hali için lütfen

http://www.sadullahkeles.com/2007/12/14/sql-de-case-when-yapisi/

adresini ziyaret ediniz..

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İŞ’

ENDAS STATU

FROM TABLOM

About these ads

İşlemler

Information

35 responses

14 12 2007
H.Tonguç Yılmaz

Bunlar da Oracle için örnekler –

http://psoug.org/reference/decode_case.html#case

Paylaşalım :)

14 12 2007
Sadullah KELEŞ

:) bu örneklere ve yazdığınız makalelere oldukça ihtiyacım olacak Tonguç bey. paylaştığınız için teşekkür ederim. oracle öğrenmek(en azından öğrenmeye çalışmak) hayalimdi, yavaş yavaş başlıyorum

27 12 2011
yıldırım

Merhaba Sadullah bey;
Sql case when komutunu çok güzel anlatmışsınız.Benim şöyle bir sorum olacak.bir tabloda a,b,c diye üç ürün var.yanında üçünün aylık satış miktarları ve tutarları var.a ürününden ayda 5 kere , b ürününden 3 kere , c dende 4 kere satılmış.Ben bu üç ürünün toalık toplam satış miktarını nasıl alabilirim.Yardımcı olursanız sevinirim.

5 06 2013
faruk

select sum(asatismiktari),sum(bsatismiktari),sum(csatismiktari) from satis

2 01 2008
Yasin

Selamlar,
abi ben ana sayfaya tıkladığımda paylaşaım kısmı açılıyor, neden acaba?
Hörmetler.

2 01 2008
Sadullah KELEŞ

paylaşalım sayfasını ana sayfa olarak ayarlamıştım o yüzden :)

4 11 2008
Çağdaş

Paylaşım için teşekürler gerçekten faydalı bir bilgi

26 04 2009
MURAT

Sonunda birisini şu case yi doğru anlatmış. Teşekkür ederim.

Oldukça açıklayıcı olmus.

teşekkürler.

27 04 2009
Sadullah KELEŞ

işine yaramasına sevindim, kolay gelsin.

25 05 2009
1 09 2009
Hülya

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)

1 09 2009
Sadullah KELEŞ

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.

1 09 2009
Hülya

o şekilde olmaz.Çünkü where kısmında onlarca kayıt oldugunu düşünün.

1 09 2009
Hülya

dediğiniz şekildede sonuç vermedi.

1 09 2009
Hülya

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

1 09 2009
Sadullah KELEŞ

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.

16 09 2009
Fatih Topçu

Daha detaylı anlatım;

http://psoug.org/reference/decode_case.html#case
(ing)

16 09 2009
Sadullah KELEŞ

o linki ilk commentte Tonguç bey vermişti zaten ama yinede paylaşım için teşekkür ederim. :)

21 01 2010
Fatih

Tonguç dostum çok sağol 8’de sınavım var bu makalen çok açıklayıcı ve faydalı olmuş.Teşekkür ederim Tonguç.

22 01 2010
Sedat Kumcu

Bu güzel yazı için teşekkürler. İyi çalışmalar.

5 03 2010
YILDIZ

banada yardım edin lütfen…!!!!!
fungtion kulanımını açıklayın yardım edin kurtadın beni bu ödevdennnnn!!!!!!

5 03 2010
kanije
4 05 2011
Aura Cleanmax

Gayet açıklayıcı bir makale olmuş Teşekkürler

19 01 2012
Sql de Case-When Yapısı | Ercan Ayhan

[...] Sql de Case-When Yapısı Sql de Case-When Yapısı [...]

19 02 2012
yıldırım

Merhaba arkadaşlar;
Ben case when ‘i kullanarak CASE WHEN surname = like ‘A%’ THEN ‘A ile başlayanlar ” END AS [Soyad]
yukarıdaki gibi soyadı A harfi ile başlayanlar deyebilirmiyim.Bir türlü çalıştıramadım.Acil yardımlarınızı beliyorum.

20 02 2012
Sadullah KELEŞ

onun için case when e ihtiyacın yokki where surname like’A%’ diyebilirsin.

20 02 2012
yıldırım

Sadullah bey;
Ben şöyle bir şey yapacağım A ile başlayanlar bir sütuna B ile başlayanlar ayrı bir sütuna c’ler ayrı bir sütuna gelsin demek istiyorum bu yüzden case when’i kullanmak istedim.Where ile yapamadım veya farklı bir yol ile yapabilirmiyim.

20 02 2012
Sadullah KELEŞ

söylediğin şey cube ile data özetleme gibi bir şey sanırım, ama onda ilk karaktere göre işlem yap gibi birşey denebilir mi bilmiyorum. cube üzerine bir yoğunlaş istersen.

22 02 2012
Murat

Sn.Yıldırım
surname den sonra = kullanmamalısınız. Eğer aşağıdaki şekilde kullanırsanız çalışacaktır.
CASE WHEN surname like ‘A%’ THEN ‘A ile başlayanlar ” END AS [Soyad]

27 02 2012
Asu

Otel otomasyonu yapıyorum ve dolu veya boş olmasına göre oda listelemesi yapacağım. Bunun için dışarıdan alacağım başlangıç ve bitiş tarihleri var. Bu tarihleri “rezervasyon” tablomun “Rzv_Start” ve “Rzv_End” ile karşılaştırıyorum. Daha sonra “durum” adından bir kolon türetip buna ilk koşulumu sağlarsa “dolu”, 2. koşulumu sağlarsa “boş” yazdırmak istiyorum.

Sorun ise sql serverda dolu ve boş kelimelerinin altını çiziyor. Case when yapısında adlandırma nasıl olacak?

Create Procedure OdaOzellikSP
@ResepsiyonMdlBasTrh datetime,
@ResepsiyonMdlBitTrh datetime
as
SELECT o.Id,o.Numara,
(case when((@ResepsiyonMdlBasTrhr.Rzv_Start)or (@ResepsiyonMdlBasTrh>r.Rzv_Start and @ResepsiyonMdlBasTrh<r.Rzv_End)) then "dolu" else "boş" end) as durum,r.Rzv_Start, r.Rzv_End, s.Sts_Start, s.Sts_End

FROM dbo.Rezervasyon AS r INNER JOIN
dbo.Oda AS o ON o.Id = r.Oda_Id LEFT OUTER JOIN
dbo.Satis AS s ON s.Oda_Id = o.Id

27 02 2012
Asu

“dolu” kullanmak yerine ‘dolu’ yazmalıydım tabi :) sonradan fark ettim bunu.

28 02 2012
Sadullah KELEŞ

:)) gözden kaçıyor bazen

17 05 2012
tarik

iyi günler,bu yapıyı computed column spesification da kullanabilir miyiz ??

12 12 2013
Sedat Kumcu

Her unuttuğumda bana yardımcı olan bu değerli yazı ve emeğin için teşekkürler.

7 04 2014
Orkun

İnsan yazmaya yazamaya unutuyor. Teşekkürler

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logo

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter picture

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook photo

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ photo

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s




Takip Et

Her yeni yazı için posta kutunuza gönderim alın.

%d blogcu bunu beğendi: