sorgu ?

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
Misafir

sorgu ?

Mesaj gönderen Misafir »

günaydın


stok_table

stokkod...stokadi..........fiyati
100.......ELMA.............1000
101.......ARMUT............2000


stokhar_table

tarih.......stokkod...G/C..miktar
01.01.2004..100.......G....12
01.01.2004..101.......G....15
15.01.2004..101.......c....6
17.01.2004..100.......c....7
.
.
.
.


(G:Giriş, C:Çıkış)


şeklindeki iki tablodan

stokkod...stokadi..giren..cikan..kalan..deger
100.......ELMA.....12.....7......5......5000
101.......ARMUT....15.....6......9......18000


şeklinde sonuç üretecek sorguyu nasıl yazabiliriz.

teşekkürler...
onaydin

Mesaj gönderen onaydin »

Firebird için;

Kod: Tümünü seç

select SB.STOKKOD,COALESCE(sum(case s.G_C when 'G' then MIKTAR end),0) as GIREN,
COALESCE(sum(case s.G_C when 'C' then MIKTAR end),0) as CIKAN ,
COALESCE(sum(case s.G_C when 'G' then MIKTAR end),0)  - coalesce(sum(case s.G_C when 'C' then MIKTAR end),0) as KALAN,
(COALESCE(sum(case s.G_C when 'G' then MIKTAR end),0)  - coalesce(sum(case s.G_C when 'C' then MIKTAR end),0))* SB.FIYAT  as DEGER
from STOK  s
right outer join STOK_BILGI SB on s.STOKKOD = SB.STOKKOD
group by SB.STOKKOD,SB.FIYAT
STOK detay tablo, STOK_BILGI ise ana tablo,
right outer join i eğer o ürün için detay tabloda kayıt girilmese dahi sonuç setinde gözükmesi için kullandık.

Aslında ilk üç sütünda iş bitiyor, fb alias ları bir sonraki kolonda tanımadığından aynı şeyleri tekrar yazıyoruz.

COALESCE bir fonksiyon eğer toplamın sonucu null dönüyorsa onu 0 a çeviriyor (case .. is not null ile veya isnull ile aynı işi görüyor farklı bir veritabanında bunları deniyebilir, aliasları tanıyorsa (GIREN - CIKAN) * FIYAT diyebilirsiniz.)
Misafir

teşekkür

Mesaj gönderen Misafir »

aynı yazım ile MS-SQL de de sonuç aldım.

teşekkür ederim.
Cevapla