Case Of

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Case Of

Mesaj gönderen pro_imaj »

Merhaba;

Kod: Tümünü seç

case StrToInt(DesenEdit.Text) of
   01..99:BirimTut:=22 ; //ÇOCUK
   101..110:BirimTut:=23; //SECCADE
   111..119:BirimTut:=40;//DÜZ ÖRGÜ
   201..299:BirimTut:=30;//OYMALI
   401..499:BirimTut:=20; //HALI
   2100..2199:BirimTut:=24;//DUVARDAN DUVARA
   4001..4999:BirimTut:=21;//MUTFAK
   9999..9999:BirimTut:=99;//PASPAS
   else ;
 end;
Delphi tarafında yazdığım bu case of ile ilgili işlemi yapıyorum. Bu işlemi veri tabanında tanımlanacak şekilde yaptım.

Kod: Tümünü seç

BaslangicDeger, BitisDeger, Aciklama,      Sonuc
401	                 499	   CARPIER	     20	
4001	                4999	  MUTFAK	    21	
01	                  99	     ÇOCUK	      22	
101	                110	   SECCADE	   23	
2100	               2199	  DUVARDAN 	24	
201	                299	   OYMALI	     30	
111	                119	    DÜZ ÖRGÜ	  40	
9999	              9999	  PASPAS	  99	
Bu şekilde vt tasarladım ama SQL de Case of kullanımıyla ilgili bilgim yok MSSQL helpindede istediğim sonuca ulaşamadım Nasıl bir kodlama yapmalıyım acaba mantık olsa yeterli.

Teşekkür Ederim.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Case of ile yapmaktan vazgeçtim yapamadım daha doğrusu.

While do ile delphi tarafında yaptım.
Teşekkürler. :(
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

MS-SQL ciler tatilde sanırım :wink: Biz de bilememiştik :roll:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Tatilden daha ziyade arkadaş ne yapmak istediğini net olarak açıklamamış. Normalde MS-SQL Server'ın SQL tarafında Delphi içinde kod yazmaya gerek kalmayacak şekilde çözümler bulabiliyorsunuz. Tabi ne yapmak istediğinizi nasıl ifade edeceğinizi bilmeniz gerekiyor.

Eğer kastın CASE WHEN kullanımı idiyse:

Kod: Tümünü seç

CREATE TABLE DEGERLER (
       KOD   INTEGER NOT NULL,
       AY    INTEGER NOT NULL,
       DEGER DOUBLE PRECISION,
CONSTRAINT PK_DEGERLER PRIMARY KEY (KOD, AY));

SELECT
  KOD,
  SUM(CASE WHEN AY = 1 THEN COALESCE(DEGER, 0) ELSE 0 END) AS OCAK,
  SUM(CASE WHEN AY = 2 THEN COALESCE(DEGER, 0) ELSE 0 END) AS SUBAT,
  SUM(CASE WHEN AY = 3 THEN COALESCE(DEGER, 0) ELSE 0 END) AS MART,
  SUM(CASE WHEN AY = 4 THEN COALESCE(DEGER, 0) ELSE 0 END) AS NISAN,
  SUM(CASE WHEN AY = 5 THEN COALESCE(DEGER, 0) ELSE 0 END) AS MAYIS,
  SUM(CASE WHEN AY = 6 THEN COALESCE(DEGER, 0) ELSE 0 END) AS HAZIRAN,
  SUM(CASE WHEN AY = 7 THEN COALESCE(DEGER, 0) ELSE 0 END) AS TEMMUZ,
  SUM(CASE WHEN AY = 8 THEN COALESCE(DEGER, 0) ELSE 0 END) AS AGUSTOS,
  SUM(CASE WHEN AY = 9 THEN COALESCE(DEGER, 0) ELSE 0 END) AS EYLUL,
  SUM(CASE WHEN AY = 10 THEN COALESCE(DEGER, 0) ELSE 0 END) AS EKIM,
  SUM(CASE WHEN AY = 11 THEN COALESCE(DEGER, 0) ELSE 0 END) AS KASIM,
  SUM(CASE WHEN AY = 12 THEN COALESCE(DEGER, 0) ELSE 0 END) AS ARALIK
FROM DEGERLER
GROUP BY KOD
ORDER BY KOD



...CASE WHEN KOD = 1 AND AY = 1 THEN DEGER WHEN KOD = 2 AND AY < 3 THEN 5 WHEN AY = 12 THEN 2176 ... ELSE NULL END...
İyi çalışmalar.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;
Yorumlar ve kodlar için teşekkür ederim.

@HakanCan hoacam case of kullanımını kısmen biliyorum yanlız sizinde yazdığınız örnekte manuel bilgiler yazmışsınız mesela Ocak,Şubat diye halbuki ben bunu veri tabanından almak istiyorum Delphi tarafından yazdığım kodu yazarsam biraz daha iyi bir anlatım olur sanırım.

Kod: Tümünü seç

 DesenTanimQuery.First;
 While not DesenTanimQuery.Eof do
 begin
   if (((DesenTanimQueryBaslangicDeger.Text))<= ((Desenedit.Text)))
   and (((DesenTanimQueryBitisDeger.Text))>= ((Desenedit.Text))) then
   begin
     BirimTut:=strtoint(DesenTanimQuerySonucDeger.text);
     break;
   end;

      DesenTanimQuery.Next;
 end;

 Sonuc:=  ('152.'+IntToStr(BirimTut));

Yukarıdaki işlemi SQL ile nasıl yapabilrim acaba !

Yani Kullanıcının DesenEdit'e girdiği rakamı alıcak sonra veri tabanındaki BiRinciDeger ile İkinciDeger arasında ise ilgili satıra ya konumlanacak veya sadece onu listeleyecek.

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

@HakanCan hocam eksk bişeylermi yazdım acaba. :roll:

Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

İsteğini delphi tarafında halletmişsin.

SQL anladığım kadarıyla direk isteğini yerine getiremeyecek.

İyi çalışmalar.
Cevapla