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: 166
Kayıt: 05 Eki 2007 07:02

Yürüyen bakiye

Mesaj gönderen KoPilot » 09 Eyl 2019 10:38

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: 166
Kayıt: 05 Eki 2007 07:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot » 12 Eyl 2019 10:41

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: 3044
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Yürüyen bakiye

Mesaj gönderen sabanakman » 13 Eyl 2019 03:34

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: 166
Kayıt: 05 Eki 2007 07:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot » 13 Eyl 2019 10:20

sabanakman yazdı:
13 Eyl 2019 03: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: 3011
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Yürüyen bakiye

Mesaj gönderen mkysoft » 14 Eyl 2019 03:23

Oluşturduğunuz temp tabloya mevcut kayıtlarınızı eklemelisiniz. Eklemeyi yaparken bakiye hesabı yapabilirsiniz.

mkysoft
Kıdemli Üye
Mesajlar: 3011
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Yürüyen bakiye

Mesaj gönderen mkysoft » 14 Eyl 2019 03: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

Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 166
Kayıt: 05 Eki 2007 07:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot » 14 Eyl 2019 11:15

Çö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: 166
Kayıt: 05 Eki 2007 07:02

Re: Yürüyen bakiye

Mesaj gönderen KoPilot » 14 Eyl 2019 11:18

mkysoft yazdı:
14 Eyl 2019 03: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: 554
Kayıt: 16 Eki 2003 01:07

Re: Yürüyen bakiye

Mesaj gönderen selimr » 17 Eyl 2019 03:34


Cevapla