Delphi Can

Orjinalini görmek için tıklayınız: SQL Running Sum
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba arkadaşlar. Hali hazırda kullandığım bir ön muhasebe programı var kendi yaptığım. Elimin boşluğunda tabloya bir bakiye kısmı ekleyim dedim. SQL ile halletmeyi düşündüm ama bir türlü doğru sonuca ulaşamadım.

Sorgu Şu Şekilde:

SELECT a.cariid, a.istarihi, a.kisi, a.aciklama, a.alinan, a.verilen, 
(SELECT SUM(b.verilen-b.alinan)
FROM caridb b
WHERE b.istarihi <= a.istarihi AND b.kisi ='matbacı')
FROM caridb a where  a.kisi = 'matbacı'
ORDER BY a.istarihi;

Tablo Şu Şekilde:

cariid   istarihi                alinan           verilen           bakiye
 1        01.01.2014               0                390              390
 2        02.01.2014               0                  90              480
 3        03.01.2014               0               1600            2080
 4        04.01.2014               0                 500            4665
 5        04.01.2014               0               2085            4665

Sorguyu çalıştırınca bakiyeler tablodaki gibi çıkıyor. İlk üç kayıt doğru hesaplamayı yapıyor daha sonra dördüncü ve beşinci kayıt bozuluyor. Takib eden rowlarda da ilk üç satır doğru hesaplıyor diğer iki satır bozuluyor. Tüm tablo boyunca böyle bir döngü oluyor. ADOquery ile dbgride bağlı olan bir tablo bu. On calc denedim ama dbgrid her scrollda yeniden hesaplama yapıyor ve doğru sonucu alamıyorum bu yüzden sql kullanmak istedim.

Yardımcı olursanız sevinirim. Şimdiden teşekkürler.

Sorunu çözdüm Big Grin. istarihi <= eşitliği hesaplamayı bozuyor. Aynı tarihteki işlemleri bir grup olarak işlem yapıyor problem bundan kaynaklanıyormuş. Yani aynı tarihteki değerlerin bakiyesi o yüzden aynı görünüyor. Yani üç kayıt doğru iki yanlış olması eşit tarihlerin gelmesi bu döngü tamamen bir rastlantıymış. Sorgu şu şekilde doğru çalıştı. Tarihe göre değil unique olan cariid ye göre işlem yaptırdım problem çözüldü.


SELECT a.cariid, a.istarihi, a.kisi, a.aciklama, a.alinan,a.verilen,
(SELECT SUM(b.verilen-b.alinan)
FROM caridb b
WHERE b.cariid <= a.cariid AND b.kisi ='matbacı')
FROM caridb a where a.kisi = 'matbacı'
ORDER BY a.cariid;
Merhaba @rekarex ,

Cevabı bulmuşsunuz, tebrikler. Veritabanı türünüzü belirtmemişsiniz fakat ek bilgi olarak forumumuzda bu konuda bir makale zaten var idi.

Tavsiyem; SQL Server kullanıyorsanız ( veya kullanacaksanız ) yazıyı inceleyin, belki farklı bir ışık yanar aklınızda Wink

http://www.delphican.com/showthread.php?tid=2078
Merhaba hocam,

Teşekkür ederim. Akşama kadar uğraştım çözemedim ama malum pazar sabahı iyi bi kahvaltı, çay derken jeton düştü doğrusu. Access veritabanı kullanıyorum. Yazınızı inceleyecem, server kullanmıyorum şimdilik basit bir program zaten. Ama android ile bağlantılı, lokal ağ üzerinde bi server düşünmüyor değilim. Bizimkisi amatörce.