Sql hakında

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Sql hakında

Mesaj gönderen name »

Herkese iyi akşamlar

select m8,(m1-m2) fark from kasa

Bu ifadede "fark" alanı negatif ise nasıl sıfır olmasını sağlarım. Biliyorsunuz, bu Delphi'de max(double1-double2,0) ifadesiyle rahatlıkla yapılabilir.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Eğer yapmak istediğiniz şey MS-SQL Server'da ise, CASE WHEN ile halledebilirsiniz.

Örnek,

Kod: Tümünü seç

  SELECT M9, 
    FARK = CASE
      WHEN M1 > M2 THEN (SELECT M1-M2)
      WHEN M2 >= M1 THEN (SELECT 0)
    END
  FROM KASA
Yukarıdaki syntax tam olmayabilir (şu anda MS-SQL Server'aerişemediğim için test edemedim ancak aynı yapıda daha önce çok kullandım.

Ancak istediğiniz IB/FB Server'da olacak ise bu iş için bir Stored Procedure Yazıp, FOR SELECT şeklinde döngü kurup, bu döngü içerisinde Result Set'i kendiniz kontrollu bir biçimde oluşturmanız gerekir.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet Kuri'nin de dedigi gibi select icinde case ya da if expression kullanılabilen veritabanalrinda bu cok kolay ama interbase ve firebird'de yok saniyorum eger paradoz kullanıyorsanız zaten hic yok. Ama her ikisi icin de su kod isinizi gorur saniyorum....

Kod: Tümünü seç

select m8,0 fark from kasa where (m1-m2)<=0 
union
select m8,(m1-m2) fark from kasa where (m1-m2)>0
Fakat burada eger m1 veya m2 alanlari null deger iceriyorsa is null kontrolleri filan da koymak gerekecektir....
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Teşekkür ederim
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

Mesaj gönderen safak »

select m8,(m1-m2) fark from kasa

SELECT M8, CASE WHEN (M1-M2 < 0 ) THEN 0 ELSE M1-M2 END FARK FROM KASA

Kolay Gelsin,
----------------
FB ver >= 1.5
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

safak bey bu sql ifadesini FireBird 1.0.3 de kullanabilirmiyim. Gerçi imzanızda "FB ver >=1.5" gibi bir şey yazılı ama :?:
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

Mesaj gönderen safak »

1.5 daki yenilikler pdf dosyasından okumuştum.
1.5 da denedim çalışıyor.
Bende daha eski versiyonlar kurulu değil.

Kolay Gelsin,
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

En kısa sürede deneyeceğim.
Teşekkürler. İyi çalışmalar.
Cevapla