Stok kontrolü icin 2 tablodan sorgulama

Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
selam arkadaslar,

kisaca sorunumu anlatmak istiyorum,

veri dosyasinda bulunun, GIRIS ve SATIS adli iki tablom var, GIRIS tablosunda mal girisi yapiyorum, SATIS tablosunda cesitli musterileri satis yapiyorum, daha sonra iki tabloyu kullanarak stok kontrolu yaptirmak istedim ve SQL cümlesini su sekilde yazdim:

SELECT GIRIS.POZISYON_NO, SUM(GIRIS.ADET) AS GIRIS_TOPLAM_ADET, SUM(SATIS.ADET) AS SATIS_TOPLAM_ADET FROM GIRIS,SATIS WHERE GIRIS.POZISYON_NO=SATIS.POZISYON_NO AND GIRIS.GIRIS_ID=VAL(SATIS.GIRIS_ID) GROUP BY GIRIS.POZISYON_NO

aldigim tablo sunucu:

POZISYON_NO GIRIS_TOPLAM_ADET SATIS_TOPLAM_ADET
-------------- -------------------- ---------------------
57020 5840 3560

verdi, oysa giris toplaminida 3560 adet vermeliydi, hatam yada eksikligimin nerede oldugunu aciklayabilirseniz cok sevinirim,

simdiden ilginize tesekkurler

veri ornek dosyasi ektedir
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
bu sorunun cevabını bulmak için, sorgunu toplam fonksiyonunu kullanmadan çalıştır.

yani gruplama. bak bakalım her iki tablodan nasıl kayıtlar geliyor ve hangi adetler toplama girer.

(sorgu :
SELECT GIRIS.GIRIS_ID, GIRIS.ADET, SATIS.GIRIS_ID, SATIS.ADET
FROM GIRIS INNER JOIN SATIS ON (GIRIS.POZISYON_NO = SATIS.POZISYON_NO) AND (GIRIS.GIRIS_ID = SATIS.GIRIS_ID);
)

sonuclar nasıl peki?

A = GIRIS.GIRIS_ID
B = SATIS.GIRIS_ID
C = GIRIS.ADET
D = SATIS.ADET

A.........B..........C........D
171.... 171...... 640.... 640
172.... 172.... 1200.... 360
172.... 172.... 1200.... 840

173.... 173.... 1080.... 240
173.... 173.... 1080.... 840

174.... 174...... 160.... 160
175.... 175...... 480.... 480

farkettin mi şimdi?

172 ve 173 satışta çift olduğu için giriş te de çiftledi.

yani sorgun hatalı. düzeltmen lazım.
 
Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
hemen cevapladiginiz icin cok tesekkür ederim,
sorguyu düzelttip ve sorun giderildi

select satis.pozisyon_no,(SELECT sum(giris.adet) FROM GIRIS group by giris.pozisyon_no)-sum(satis.adet) from satis group by satis.pozisyon_no

bu sekilde yapinca düzeldi

calismalarinizda basarilar dilerim
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
bunun doğruluğundan emin misin peki?
 
Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
tablo icerisinde ayni pozisyon olunca calisiyor ama farkli bir pozisyon ekledim, hata verdi, kisacasi sorun halen devam ediyor :(
galiba yardim alamadan halledemeyecegim
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
GIRIS.pozisyon_no = satis.pozisyon_no

bu esitliği son sorguna monte et.
 
Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
su sekilde düzelttim

SELECT giris.pozisyon_no,SUM(giris.adet),(SELECT SUM(satis.adet) FROM satis WHERE satis.pozisyon_no=giris.pozisyon_no GROUP BY giris.pozisyon_no) FROM giris GROUP BY giris.pozisyon_no

bu sekilde tabloda giris ve cikislari görebiliyorum, yanliz toplamlari birbirinden cikartmak istedigimde, örnegin giris yapilmis ama satisi yapilmamissa, girisin tabloda görülmesi gerekiyor ama bu sorgu ile satis olmadigi icin girisi 0 (sifir) gösteriyor, cünkü " satis.pozisyon_no=giris.pozisyon_no " kosulu saglanamadigi icin deger vermiyor
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
eğer 2 tablo karşılaştırılıyorsa ve birinde var birinde yok gibi durumlar oluyorsa ve,

yok olma durumunun, sonucu etkilemesi istenmiyorsa

LEFT JOIN veya RIGHT JOIN

kullanılır.

sorguyu bu şekilde düşünerek tasarla.
 
Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
ugrastim ama yapamadim, sizden rica etsem sql cümlecigi olusturabilirmisiniz, girisi olupta satis olmayan kisimlarda satis kismi göz ardi edilebilsin

son veri dosyasina gore
tablo sonucunda

pozisyon_no....stok_adedi

57020..............0
57030..............1080

diye sonuc alabilmeliyim

tesekkürler
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;
Sorunuza çok dikkat etmedim ama Sayın Yeni54 ün dediği gibi lef-right olayı önemli burda...
SELECT GIRIS.POZISYON_NO, Sum(GIRIS.ADET) AS ToplaADET, Sum(SATIS.ADET) AS ToplaADET1, nz([giris].[adet],0)-nz([satis].[adet],0) AS kalan
FROM GIRIS LEFT JOIN SATIS ON GIRIS.GIRIS_ID = SATIS.GIRIS_ID
GROUP BY GIRIS.POZISYON_NO, nz([giris].[adet],0)-nz([satis].[adet],0);

Siz buna göre düzenleme yaparsınız..
 
Katılım
21 Ağustos 2007
Mesajlar
6
Excel Vers. ve Dili
office 2003
visual basic
problem halen devam ediyor,

giris tablosunda girmis oldugum urun adedini, satis tablosunda bir cok musteriye satiyorum yani 1000 adet giris yaptiysam 100 adet bir musteriye 300 adet baska musteriye satis yapiyorum, 400 adet sattigim icin bana stokta 600 gostermesi lazim.

iki ayri tabloyu birlestirip giris ve cikis adetlerini karsilastirip kalan miktarlari veren bir liste olusturmak istiyorum.

ben ugrastim ama halen cözüme ulasamadim, cözüm icin halen yardimlarini bekliyorum, ilgilenen Yeni54 ve Beab05 arkadaslara cok tesekkür ederim
 
Üst