SQL Yürüyen Bakiye Sorunu

trkmml

Öğrenci
Katılım
20 Ağustos 2011
Mesajlar
2
Reaksiyon puanı
0
Puanları
0
öncelikle merhaba Muhasebe ile ilgili bir yazılım üzerinde çalışıyorum vb de
Yürüyen Bakiye ile ilgili birçok sorun ve birçok çözüm önerisi okudum ancak bu yorumların hemen hemen hepsinde,
bakiyeyi alırken başvurduğumuz benzersiz ID alanı oluyor. ancak muhasebenin işleyişinde neredeyse tüm raporlar tarih sırasına göre alınır. yani ID>=5 te bakiye ne kadardı değil. 05/05/2012 tarihinde bakiye ne kadardı diye sorgulanır.
bu noktada ID üzerinden işlem yapıldığında, eğer kullanıcı birkaç işlem sonra tarihi geriye dönük bir işlem girdiğinde, tarihi eski ama ID si yeni olduğundan sorunlar yaşıyoruz. örneğin;
ID TARİH BORÇ ALACAK BAKİYE
1 02.02.2012 100,00 0,00 100,00
6 04.04.2012 0,00 150,00 -50,00
3 02.05.2012 70,00 0,00 20,00
4 02.05.2012 80,00 0,00 100,00
2 06.06.2012 120,00 0,00 220,00
şeklinde bakiye verebilmeli, ID alanı kendiliğinden artan bir alan olduğundan bu alana müdahale etme şansım yok. ancak herhangi birşekilde kullanıcı eski tarihli bir işlem girdiğinde işler karışıyor
ID si 2 olan kaydın tarihi 06.06.2012 ancak ID si 6 olan kaydın tarihi 04.04.2012 olursa listeleme tarih sırasına göre yapıldığında bakiye alma konusunda sorun yaşanıyor. en kötü ihtimalle aynı gün içerisinde 2 kayıt olduğunda bakiye formulü bozuluyor. projemde takıldığım en büyük nokta bu.
bu konuda tek çözüm geçici tablo kullanımı yada yazarken vb içerisinde hesaplatmak gibi gözüküyor. ama geçici tablo kullanımı da çok hızlı bir çözüm olmuyor maalesef.
Şimdiden Teşekkürler,

Saygılar,
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
263
[MENTION=168213]trkmml[/MENTION]

İstediğin işlemi bir access veritabanı üzerinde basitçe uyguladım. Tabi ki daha pratik çözümler üretilecektir. Ancak ilk etapta sana fikir vereceğini umuyorum.

Tablomuz:
DwHif.png



Öncelikle Tarih bazında borç ve alacak toplamlarını alan iki yardımcı tablo oluşturuyoruz.

Borç sorgusu:

bwcXX.png



Alacak sorgusu:

krJp4.png



Asıl istediğimiz işlem için

Kasa sorgusu

nz1v9.png





Sonuç :

vJYor.png
 
S

SDN Okuru

SDN Okuru
bu işlemde tarihe göre gruplama var ben tarihe göre grup olmasını istemiyorum.
ID TARİH BORÇ ALACAK BAKİYE
1 02.02.2012 100,00 0,00 100,00
6 04.04.2012 0,00 150,00 -50,00
3 02.05.2012 70,00 0,00 20,00
4 02.05.2012 80,00 0,00 100,00
2 06.06.2012 120,00 0,00 220,00

yani bakiye her satır için ayrı ayrı hesaplanmalı
aynı gün birden çok işlem varsa gruplamayıp her işlem sonrası bakiyeyi göstermeli
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
263
O zaman MasterID ve DetayID gibi alanlara ihtiyacınız olacak detay tablosunda bir alanda masterid alanını yazarsınız ve bu alana göre ana tablodan eşleme yaparsınız. Böylece AnaID ve sadece bunlara bağlı olan kayıtların borç-alacak toplamlarını alırsınız.

Örneğin:
ana-tablo
--------------
MasterID
tarih
açıklama

detay-tablo
-----------
DetayID
MasterID
tip
tutar

gibi.
 
S

SDN Okuru

SDN Okuru
cevaplarınız için teşekkür ederim

bu sorgu ile çözüme ulaştım

SELECT [ID], [TARIH], [BORC], [ALACAK]
, Sum([BORC] - [ALACAK]) OVER (ORDER BY [TARIH], [ID]) AS [BAKIYE]
FROM DENEME
 
Üst