Sql de Calculated Bakiye Toplamı Hk.

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ı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Sql de Calculated Bakiye Toplamı Hk.

Mesaj gönderen ender_arslanturk »

Herkeze Merhabalar,

Arkadaşlar şimdi aşağıda gördüğünüz liste kasa hareketlerine ait bir liste şimdi soru şu bu listede kasaların yapılan hareketleri var aşağıdaki listede sadece 1 numaralı kasaya ait gün içi yapılan hareketler....

Burada bakiye query içinde tanımlanmış float cinsinden calculated bir fields dir.

veritabanında kayıtlı bulunan tahsilat ve ödeme hareketlerinin anlık bakiyesini vermektedir. Yani her yeni kayıt ( tahsilat ve odeme ) bakiyenin değişmesine sebep olmaktadır.

Aşağıdaki listede verilen bakiye tutarı ancak 2 tane query ile kontrol edilebilmiştir. Şimdi soruyorum bunu tek 1 tane query ile nasıl kontrol edebiliriz. Bu konuda yardımcı olursanız sevinirim.


Tarih Kasano Tahsilat Odenen Bakiye(Calculated)
========= ========= =========== ======= =======
01.01.2005 1 100 100
01.01.2005 1 200 300
01.01.2005 1 50 250
04.01.2005 1 20 230
05.01.2005 1 10 240
05.01.2005 1 10 230
07.01.2005 1 15 245
08.01.2005 1 40 205
10.01.2005 1 300 505
10.01.2005 1 100 405
10.01.2005 1 200 205
11.01.2005 1 50 255
11.01.2005 1 10 245
16.01.2005 1 10 235
16.01.2005 1 10 225
16.01.2005 1 10 235


Not : Bu olayı bazı arkadaş ile paylaştım ama kimse her türlü yolu denemesine karşın yapılamamıştır.

Saygılarımla,
En son ender_arslanturk tarafından 09 Ağu 2005 11:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
andronoid
Üye
Mesajlar: 35
Kayıt: 26 Tem 2004 06:44

Mesaj gönderen andronoid »

sorunu biraz daha aç. tam olarak ne yapmak istiyorsun. kaba tabirle bakiye borç-alacak tır. query yerine vt de tabloda bakiye adlı calc alan oluştur. borc-alacak olarak ayarla ya da dediğin gibi tahsilat-odenen.

tahsilat ve odemeler ayrı tabloda ise sp ile bunlara ait tutarları cekip farkını aldırıp delphide tek query ile halledebilirsin.daha önceden bu konular konuşuldu.

iyi geceler.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Merhaba

Mesaj gönderen ender_arslanturk »

Mesela şöyle anlatim;

01.01.2005 tarihinde saat 10:00 da kasa tahsilat yaptı 100 lira dolayısı ile calculated deki bakiye alanı 100 lira oluyor.

tekrar aynı gün saay 15:00 da 40 lira ödeme yapılıyor bu sefer bakiye ( yani bir sonraki kayıt alanındaki ) 60 liraya düşüyor

bundan sonra o gün veya daha sonraki bir zamanda ise tekrar tahsilatlar ve ödemeler yapılıyor

kısacası anlatmak istediğim her yeni bir işlemde bakiye değişmektedir.
bir üstteki hep bakiyenin üstüne yine tahsilat-ödenen eklenip bulunduğu kayıtta yeni bakiye oluşturacaktır.


Örnek:

tarih --- saat --- kasano --- tahsilat --- ödenen --- bakiye
===========================================
01.01.2005 --- 10:00 --- 1----------100-------------------------100
01.01.2005 --- 12:00 --- 1-----------50--------------------------150
02.01.2005 --- 15:00 --- 1-----------25--------------------------125
03.01.2005 --- 12:00 --- 1-----------50--------------------------175
03.01.2005 --- 18:00 --- 1----------100---------------------------75
.
.
.

gibi buradaki tanımlı bakiye alanı sürekli değişmektedir.

Bunu Tek Bir Query ile Nasıl Yapabiliriz. Ama 2. bir query olmaksızın.....

Sayılarımla
En son ender_arslanturk tarafından 09 Ağu 2005 11:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Çok iddialı kesin konuşmak istemiyorum ama böyle bir sonucu tek bir select statement ile alamayacağınız kannatindeyim...

Nitekim viewtopic.php?t=7440
bu mesajda aynı soruya verdiğim cevap yardımcı olacaktır sanıyorum... Benzer durumlarda ben o son bakiye sutununu quick report tarafında hallediyorum ve gayet kolay olmuş oluyor....

Kolay gelsin.....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

fahrettin abi evet dediğin gibi bayağı yardımcı oldu sistemi şu şekilde yaptım. Örnek yeni bilgi verim sana şimdi tabloda carino,borc,alacak var

query e yeni kalan ve bakiye adında calculated alanlar float cinsinden ekledim.

query1in oncalcfields olayına şu komutu verdim;

.
.
.
.


var
form1:tform1;
kal:currency;
implemetation

{$r *.dfm}

procedure Tform1.button1click(sender: Tobject);
begin
kal:=0;
query1.close;
query1.open;
end;

Procedure Tform1.query1calcfields(dataset: tdataset);
begin
query1kalan.value:=query1borc.value-query1alacak.value;
kal:=kal+query1kalan.value;
query1bakiye.value:=kal;
end;


bu şekilde yaptığım zaman bakiye olaylarını bana kayıt listesine göre vermekte ancak mesela dbgrid de gözüken kayıt sayısı 10 ben 15 inci kayıda gidip tekrar ilk kayıtlara geldiğim zaman ilk kayıttaki bakiye rakamı artmaktadır. bu olayıda çözebilirsek süper olur.

Saygılarımla,

ender_arslanturk@hotmail.com
En son ender_arslanturk tarafından 09 Ağu 2005 11:17 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

Bir ara söylediğin şey için çook ter dökmüştüm.kaç gün uğraştığımı bilmiyorum ama sonucu
Programlama kısmında dbgrid de borc-alacak bakiyede hesaplama başlığı ile paylaşmıştım :wink: Ordan bakarsan bir fikir edinebilirsin.
Cevapla