SQL problemi, sayilari ikiye katliyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
jafari1983
Üye
Mesajlar: 44
Kayıt: 05 Eyl 2010 10:32

SQL problemi, sayilari ikiye katliyor

Mesaj gönderen jafari1983 »

SQL komutu verdigimde sayilari ikiye katliyor.
Bu benim tablom
Resim



Bu ise benim yapmak istediyim shey
Yani, sadece "satis" i listelemek, ama satis yaparken mal_isimlerini kullanmiyorm, sadece olarak barkod kullaniyorum.
Resim


Bu SQL kodunu kullaniyorm, ama nerde yanlis yapdigimi bilmirem. SUM Fieldlerini 2-e katliyor.

Kod: Tümünü seç

SELECT T1.BARKOD, T1.QIYMET, SUM(T1.MIQDAR) AS MIQDAR,
SUM(T1.TOTAL) AS TOTAL, T2.MAL_ADI

FROM TABLE1 T1 INNER JOIN TABLE1 T2
ON T1.BARKOD=T2.BARKOD

WHERE T1.VEZIYYET="SATIS"
AND T2.VEZIYYET="ALIS"

GROUP BY
T1.BARKOD, T1.QIYMET, T2.MAL_ADI

Projemi de yukledim (source code) (Delphi 7 + ADO + MS Access 2003)

http://www.boxca.com/1rkk2u2bxfvj/sql_test.rar.html

Onceden tesekkurler.
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL problemi, sayilari ikiye katliyor

Mesaj gönderen sabanakman »

Bu tür durumlarda join ile oluşan kayıtları sum yapmak bu gibi sorunlu durumlar oluşturabiliyor. Bunun yerine toplamları hesaplanmış sonuçları join yapmak sağlıklı olan yöntem olacaktır. Sorgunuzu çok etraflıca inceleme fırsatım olmadı ama yüzeysel olarak aşağıdaki sorguyu ip ucu yakalamak açısından inceleyebilirsiniz.

Kod: Tümünü seç

SELECT T1.BARKOD, T1.QIYMET, T1.MIQDAR, T1.TOTAL, T2.MAL_ADI
FROM
  (SELECT BARKOD, QIYMET, SUM(T1.MIQDAR) AS MIQDAR, SUM(T1.TOTAL) AS TOTAL
  FROM TABLE1
  GROUP BY BARKOD, QIYMET) T1
INNER JOIN TABLE T2 ON T1.BARKOD=T2.BARKOD
WHERE T1.VEZIYYET="SATIS" AND T2.VEZIYYET="ALIS"
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
jafari1983
Üye
Mesajlar: 44
Kayıt: 05 Eyl 2010 10:32

Re: SQL problemi, sayilari ikiye katliyor

Mesaj gönderen jafari1983 »

Cavab için çox teşekkür edirem. ama bu komut doğru çalışmadı, bunun yerine sizin dediyiniz kimi hesablanmış sonuçları JOİN yapacam.

Sizce ms access 2003 (*.mdb) database-i ne qadar bilgi tuta bilir ?

30-40 gigabayt tuta bilermi ?

Teşekkürler.
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
GURGAH
Üye
Mesajlar: 22
Kayıt: 10 Ağu 2010 06:10

Re: SQL problemi, sayilari ikiye katliyor

Mesaj gönderen GURGAH »

Kod: Tümünü seç

select a.barkod,
(a.atotal-s.stotal) ElindeKalanMal 
from
(select a.barkod,a.mal_adi,
sum(a.total1) atotal 
from table1 a
where a.veziyet='ALIS'
group by a.barkod,a.mal_adi) a
left outer join 
(select s.barkod,s.mal_adi
sum(s.total1) stotal 
from table1 s
where s.veziyet='SATIS'
group by s.barkod,s.mal_adi) s
on s.barkod=a.barkod
Field İsimlerinde yada tablo isimlerinde hatalar olabilir, kontrol ettikten sonra yazarsan iyi olacağını düşünüyorum.
Kolay gelsin.
Kullanıcı avatarı
jafari1983
Üye
Mesajlar: 44
Kayıt: 05 Eyl 2010 10:32

Re: SQL problemi, sayilari ikiye katliyor

Mesaj gönderen jafari1983 »

Cavablarınız üçün çok teşekkür edirem, amma bu da çalışmadı. Zaten database'i deyişdirdim, şimdi FireBird kullanıyorum.
Access bazı SQL komutlarını desteklemedi
mesela bunu accessin SQL-i desteklemir:

Kod: Tümünü seç

UPDATE table1 SET miqdar=(SELECT SUM(table2.miqdar) AS miqdar FROM table2 WHERE barkod=4761111458433)
"Əlini (ə.) şah, Muhammədi (s.) padişah bilməyən Allahı da tanımaz!"
Cevapla