Yürüyen bakiye
Yürüyen bakiye
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.
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.
Re: Yürüyen bakiye
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.
Eskiden buralarda iğne atsan yere düşmezdi ne hale gelmiş şimdi in cin top oynuyor.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Yürüyen bakiye
Geçici (temp) tablo oluşturup, doldurmayı denediniz mi hiç.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Yürüyen bakiye
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)
)
Re: Yürüyen bakiye
Oluşturduğunuz temp tabloya mevcut kayıtlarınızı eklemelisiniz. Eklemeyi yaparken bakiye hesabı yapabilirsiniz.
Re: Yürüyen bakiye
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
https://firebirdsql.org/file/documentat ... funcs.html
Re: Yürüyen bakiye
Çözdüm. Başka bir forumdan esistem nickli kullanıcı yönlendirmesiyle.
view kodları:
SP Kodları:
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
;
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
Re: Yürüyen bakiye
Hocam, denemedim ama kodları inceledim. Sanırım firebird kendi içinde çözmüş olayı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
