cevaba dikkatli bakarsan 2. bir table zaten yok. yapılan iş senin table'ından gelen no ve masraf alanlarına 3. bir kolon eklemek bunuda yine aynı table'da bir select yapılarak bulunmuş ve bu kolona kumulatif denilmiş, ben denemedim ama muhtemelen cevap doğru
SELECT A.NUMARA, A.MASRAF,
(SELECT SUM(B.MASRAF) FROM TABLO B WHERE B.NUMARA <= A.NUMARA) AS KUMULATIF
FROM TABLO A
ORDER BY A.NUMARA
ŞEKLİNDE ÇALIŞTI..
TEŞEKKÜRLER KURİ, TEŞEKKÜRLER BGOKTAS
PEKİ BURDA NUMARA ALANI OLMASA, SADECE MASRAF ALANI OLSA
BU DURUMDA NASIL YAPABİLİRİZ..
NO CINS DEGER
----- ---- ---------
10 G 150
20 G 200
30 C 175
40 G 225
50 C 200
SQL SORGUSU İLE ŞU SONUCU NASIL ALABİLİRİM
NO CINS DEGER KUMULATIF
----- ---- --------- ---------------
10 G 150 150
20 G 200 350
30 C 175 175
40 G 225 400
50 C 200 600
yani cinsi G olursa kümülatif artacak, C olursa azalacak..
SELECT A.IDNO,A.CINS,A.DEGER,
((SELECT COALESCE(SUM(B.DEGER),0) FROM TABLOM B WHERE B.IDNO <= A.IDNO AND B.CINS='G')-
(SELECT COALESCE(SUM(B.DEGER),0) FROM TABLOM B WHERE B.IDNO <= A.IDNO AND B.CINS='C'))
AS KUMULATIF
FROM TABLOM A ORDER BY A.IDNO
IDNO CINS DEGER
----- ------- ---------
10 G 150
20 G 200
30 C 175
40 G 225
50 C 200
IDNO CINS DEGER KUMULATIF
------- ---- --------- ---------------
10 G 150 150
20 G 200 350
30 C 175 175
40 G 225 400
50 C 200 200
Explain plan a baktınız mı bu SQL özelinde ? Eğer bakarsanız tablonun birkaç defa fullscan tarandığını göreceksiniz. Kayıt sayısı birkaç yüzbini bulduğunda kullanılamayacak kadar yavaşlayacak sorgunuz. Zira bir loop kurup kayıt sayısı kez sum alıyorsunuz bu şekilde. Şayet Oracle kullanıyor olsaydınız;
SELECT no, masraf, SUM (masraf) OVER (ORDER BY no RANGE UNBOUNDED PRECEDING) kumulatif
FROM xx_test
şeklinde bir kodla bundan sakınabilirdiniz ama FireBird özelinde bundan sakınmak için toplam bilgisini dönen recordset üzerinde kendiniz oluşturma yöntemini deneyebilirsiniz.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)