08 Nisan 2007

Sql Server'da Case Fonksiyonu

SQL SERVER'da CASE fonksiyonuna bir örnek verelim. Web sitemİzdeki üyeler siteye giriş yaptıktan sonra bir karşılama mesajımız olsun ve bu mesaj da üyenin Cinsiyet,Yaş ve Medeni Durum bilgilerine göre oluşsun.

25 yaşından büyük veya evli bayanları; Hoşgeldiniz Ebru Hanım,
25 yaşından büyük veya evli erkekleri; Hoşgeldiniz Emre Bey,
18-25 yaş arası ve evli olmayan kişileri; Merhaba Ahmet/Ayşe,
18 yaşından küçükleri de; Sevgili Ebru/Emre,

olarak karşılamak isteyelim.

Önce üye tablomuzu yaratalım

CREATE TABLE [dbo].[Uye](
[UserId] [int] IDENTITY(1,1) NOT NULL,
[Ad] [varchar](50) NOT NULL,
[Soyad] [varchar](50) NOT NULL,
[Yas] [smallint] NOT NULL,
[Cinsiyet] [char](1) NOT NULL,
[MedeniHal] [char](1) NOT NULL,
CONSTRAINT [PK_Uye] PRIMARY KEY CLUSTERED
(
[UserId] ASC
)
)

Sonra örnek kayıtlarımız girelim

INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Ebru','Kaya',29,'K','B')
INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Emre','Aslan',29,'E','E')
INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Aslı','Doğan',23,'K','B')
INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Selim','Kutlu',17,'E','B')
INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Sibel','Ayaz',24,'K','E')
INSERT INTO Uye(Ad,Soyad,Yas,Cinsiyet,MedeniHal)
VALUES ('Nilay','Kalaycı',14,'K','B')



Daha sonra sql cümlemizi aşağıdaki şekilde oluşturalım.

SELECT [UserId],[Message] = CASE
WHEN Cinsiyet='K' AND (Yas>25 OR MedeniHal='E') THEN 'Hoşgeldiniz ' + [Ad]+ ' Hanım'
WHEN Cinsiyet='E' AND (Yas>25 OR MedeniHal='E') THEN 'Hoşgeldiniz ' + [Ad]+ ' Bey'
WHEN Yas>18 THEN 'Merhaba ' + [Ad]
ELSE 'Sevgili ' + [Ad]
END
FROM Uye

Sorgu sonucumuz aşağıdaki şekilde olacaktır.