İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Sinema Dizi Akıllı Ev Motosiklet Mikromobilite Kripto Para Sağlık Teknolojileri Son dakika Yazarlar
  1. Ana sayfa
  2. SDN Forum
  3. Programlama
  4. SDN Programlama Kafe
SDN Programlama Kafe

SQL Yürüyen Bakiye Sorunu

trkmml20.12.20124 cevap8.243 görüntüleme
#1
ö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,
Cevaplar
#2
trkmml

İ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:


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

Borç sorgusu:




Alacak sorgusu:



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

Kasa sorgusu





Sonuç :

Misafir
#3
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
#4
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.
Misafir
#5
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

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.

Reklam