sql sorusu... bir rakamı ilk aydan başlarak aylara göre dağıtma

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
sen
Üye
Mesajlar: 34
Kayıt: 04 Tem 2003 12:33
Konum: Ankara

sql sorusu... bir rakamı ilk aydan başlarak aylara göre dağıtma

Mesaj gönderen sen » 08 Nis 2015 03:42

sa.
iyi çalışmalar arkadaşlar...
diyelim ki aylık alacak ve tahsilimiz olsun;

Kod: Tümünü seç

Select AY, sum(ALACAKLAR), sum(TAHSIL) from TABLO1 group by AY
souç

Kod: Tümünü seç

AY        ALACAKLAR    TAHSIL 
OCAK            2        0            
ŞUBAT           1        0            
MART            3        0            
şimdi NİSAN ayında 4 TAHSİL girişi yapılmış olsun...

soru : bu 4 rakamını ilk aydan başlayarak TAHSİL sütununa ALACAKLAR miktarına göre düşerek dağıtsın.
yani aşağıdaki gibi bir sonuç olsun...

Kod: Tümünü seç

AY       ALACAKLAR  TAHSIL
OCAK         2       2
ŞUBAT        1       1
MART         3       1
SQL veya SP ile nasıl yapabiliriz... (delphi döngüleri ile değil)
tşk....

Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 11:07
Konum: İstanbul
İletişim:

Re: sql sorusu... bir rakamı ilk aydan başlarak aylara göre dağıtma

Mesaj gönderen Kuri_YJ » 19 Haz 2015 09:55

Selamlar,

Soruda SUM çekip adet yazmışsınız. Bu kısımda bir karmaşa duruyor. Yapılan tahsilat adetlerini mi tutarlarını mı alacaksınız?

Yapmak istediğiniz, belirli tarihli vadesi olan Alacakların, tahsilatı yapıldığında, geriye dönük başlayarak (FIFO ile) Kapatmalarının yapılmasını istiyorsunuz doğru mudur?

Eğer öyle ise size nasıl yapılacağının mantığından bahsedeyim.

Önce elinizdeki Toplam Tahsilatınızın Tutarını SUM ile hesaplamalısınız,
Ardından bir CURSOR açıp, Kapatması yapılmamış Alacakları çekmelisiniz ve CURSOR üzerinde dönerken, elinizdeki TOPLAM TAHSİLAT TUTARINDAN düşerek dağıtacaksınız.

Burada dikkat edilmesi gereken konular,

1. Alacak'larınız için bir tane Kapatma Tutarı fieldına ihtiyacınız var.
2. Tahsilatlarınız içinde aynı şekilde Kapatma Tutarı fieldına ihtiyacınız var. Çünkü her iki TİP için de, tüm tutar kapatılmamış olabilir. Örneğin 100 TL'lik bir ALACAK için 80 TL Tahsil etmiş iseniz, Kalan 20 TL'nin de henüz kapatılmadığını biliyor olmanız lazım.
3. Dağıtma sırasında elinizde fazla miktarda TAHSİLAT kalabilir o noktada yine yukarıdaki FIELD'lar işinize yarayacaktır.
4. Bu tahsilatlarda, hangi Alacak için Hangi tahsilattan ne kadarlık bir kısmını ödediğinize ilişkin yardımcı bir EŞLEŞTİRME tablosuna ihtiyacınız olacak. Buna neden ihtiyacınız olacak onu da belirteyim. Siz eşleştirmeyi yaptıktan sonra, kullanıcılardan biri gidip sizin Eşleştirmesi ve kapatması yapılan bir kaydı, düzeltebilir veya silebilir. Bu durumda sizin bu işlemi kullanıcıya yaptırmıyor olmanız lazım. Çünkü FIFO olarak dağıtılmış olan bir TAHSİLAT, aradan silinir veya üzerindeki tutar bilgisi değiştirilirse, otomatik olarak sizin o tarihten itibaren yapmış olduğunuz tüm eşleştirmeler çuvallayacaktır.
5. Yine bu kapatma ve eşleştirme işlemlerinin ardından sizden çok büyük ihtimal ile Vade Farkı hesaplamanız istenecektir. Orada da ADAT hesaplaması işin içine girecektir. Doğal olarak sizin de bu eşleştirme kayıtlarına ve kapatması yapılmış olan tüm kayıtlara dokundurtmamanız gerekecektir. Bunu mutlaka dikkate alın.
6. Hele ki Dövizli işlemleriniz var ise bu sefer de oluşan Fiyat Farkı faturalarını da hesaplamanız istenecektir ki bu işler sizin epey bir zamanınızı alır. Bu yüzden bu adımı yaparken başta çerçevenizi belirleyin ve mutlaka Eşleştirmesi yapılan kayıtların dokunulmaz olduğunu bilin/belirtin. Yoksa bu konuda çooook uğraşırsınız.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/

sen
Üye
Mesajlar: 34
Kayıt: 04 Tem 2003 12:33
Konum: Ankara

Re: sql sorusu... bir rakamı ilk aydan başlarak aylara göre dağıtma

Mesaj gönderen sen » 02 Tem 2015 03:18

cevabınız için teşekkürler sayın Kuri_YJ
evet işlemler dövizli. anlatımlarınız yol gösterdi tekrak tşk..

Cevapla