Yürüyen bakiye

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
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Yürüyen bakiye

Mesaj gönderen KoPilot »

Arkadaşlar merhaba;
Bir türlü beceremediğim bir şeye çare arıyorum, YÜRÜYEN BAKİYE

Benim 5 tablom var.
1- tbl_cari (cr_id, cr_unvan)
2- tbl_tahsilat (th_id, th_crid, th_tarih, th_tutar)
3- tbl_odeme (od_id, od_crid, od_tarih, od_tutar)
4- tbl_satis (sts_id, sts_crid, sts_tarih, sts_tutar)
5- tbl_alis (als_id, als_crid, als_tarih, als_tutar)

Bu tablolardan bir view oluşturup bakiyeyi satır satır görmek istiyorum. boreas'ın bu konuyla ilgili bir başlığı var (başka bir sürü daha) ama çok acemi olmamama rağmen bir türlü doğru sonuç verdiremedim. Her defasında ya korelasyon yaparak sonuç veriyor 5-6 bin kayıt 10-12 milyon olarak dönüyor ya da saçma sapan bir sürü kayıt oluşuyor.

Ufacık bir örnek program verebilecek olana minnettar olacağım.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot »

Konu hâlâ güncel ama delphiturkiye.com'un bu kadar boşaldığına inanamıyorum.
Eskiden buralarda iğne atsan yere düşmezdi ne hale gelmiş şimdi in cin top oynuyor.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
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: Yürüyen bakiye

Mesaj gönderen sabanakman »

Geçici (temp) tablo oluşturup, doldurmayı denediniz mi hiç.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot »

sabanakman yazdı: 13 Eyl 2019 04:34 Geçici (temp) tablo oluşturup, doldurmayı denediniz mi hiç.
Hocam, firebird'de geçici talo nasıl oluşturulur bilmiyorum.

Kod: Tümünü seç

CREATE TABLE #LocalTempTablo
(
    ID int,
    Ad varchar(20), 
    Soyad varchar(20)
)
ibexpert de script executive de çalıştırıyorum. Tablo oluşuyor ama ne girdiğim kayıtları görebiliyorum ne de herhangi bir müdahalede bulunabiliyorum.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Yürüyen bakiye

Mesaj gönderen mkysoft »

Oluşturduğunuz temp tabloya mevcut kayıtlarınızı eklemelisiniz. Eklemeyi yaparken bakiye hesabı yapabilirsiniz.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Yürüyen bakiye

Mesaj gönderen mkysoft »

Eğer 3.0 ve üzeri versiyon kullanıyorsanız OVER ile select içinde de çözebilmeniz mümkün. Firebird'de daha önce kullanmadım.
https://firebirdsql.org/file/documentat ... funcs.html
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot »

Çözdüm. Başka bir forumdan esistem nickli kullanıcı yönlendirmesiyle.

view kodları:

Kod: Tümünü seç

CREATE VIEW yuruyen(
    CARIID,
    TARIH,
    ACIKLAMA,
    BORC,
    ALACAK)
AS
select a.als_crid, a.als_tarih, a.als_faturano, 0, a.als_tutar from tbl_alis A
left join tbl_cari c on c.cr_id=a.als_crid
union all

select s.sts_crid, s.sts_tarih, s.sts_faturano, s.sts_tutar, 0 from tbl_satis S
left join tbl_cari c on c.cr_id=s.sts_crid
union all

select b.banka_crid, b.banka_tarih, b.banka_hareket, b.banka_cikan, b.banka_giren from tbl_banka B
left join tbl_cari c on c.cr_id=b.banka_crid
union all

select o.od_crid, o.od_tarih, o.od_aciklama, o.od_tutar, 0 from tbl_odeme O
left join tbl_cari c on c.cr_id=o.od_crid
union all

select t.th_crid, t.th_tarih, t.th_aciklama, 0, t.th_tutar from tbl_tahsilat T
left join tbl_cari c on c.cr_id=t.th_crid
;
SP Kodları:

Kod: Tümünü seç

CREATE OR ALTER PROCEDURE PROC_yuruyen(
    MUSTERI_ID INTEGER)
RETURNS (
    MUSTERI INTEGER,
    TARIH DATE,
    ACIKLAMA VARCHAR(100),
    BORC NUMERIC(15,2),
    ALACAK NUMERIC(15,2),
    BAKIYE NUMERIC(15,2))
AS
declare variable dyn_bakiye numeric(15,2);
declare c cursor for (select cariid, tarih, aciklama, borc, alacak from cislem
where cariid=:musteri_id order by tarih, cariid);
BEGIN
DYN_BAKIYE = 0.00;
OPEN C;  
 WHILE (1 = 1) DO
    BEGIN
    FETCH C INTO :musteri, :tarih, :aciklama, :borc, :alacak;
    IF (ROW_COUNT = 0) THEN LEAVE;
      DYN_BAKIYE = DYN_BAKIYE + (borc - alacak);
      BAKIYE = DYN_BAKIYE;
    SUSPEND;
    END
  CLOSE C;
END
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot »

mkysoft yazdı: 14 Eyl 2019 04:27 Eğer 3.0 ve üzeri versiyon kullanıyorsanız OVER ile select içinde de çözebilmeniz mümkün. Firebird'de daha önce kullanmadım.
https://firebirdsql.org/file/documentat ... funcs.html
Hocam, denemedim ama kodları inceledim. Sanırım firebird kendi içinde çözmüş olayı :bravo:
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Re: Yürüyen bakiye

Mesaj gönderen selimr »

Cevapla