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...
sorgu ?
Firebird için;
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.)
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
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.)