sorgu ile kümülatif toplam

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ı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

sorgu ile kümülatif toplam

Mesaj gönderen selimr »

örnek tablom aşağıdaki gibi olsun

Kod: Tümünü seç

NO        MASRAF          
-----      ---------
10         150
20         200
30         175
40         225
50         200

SQL SORGUSU İLE ŞU SONUCU NASIL ALABİLİRİM

NO        MASRAF      KUMULATIF
-----      ---------      --------------- 
10         150                  150
20         200                  350
30         175                  525
40         225                  750
50         200                  950
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Denemek lazım ama olması gerekir,

Kod: Tümünü seç

SELECT A.NO, A.MASRAF, (SELECT SUM(B.MASRAF) FROM TABLOM B WHERE B.NO <= A.NO) AS KUMULATIF 
FROM TABLOM A
ORDER BY A.NO
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

benim burda tek tablom var

ve bu tablodaki masrafları her satırda toplayarak üçüncü bir kolon oluşturup oraya kümülatifleri yazmasını istiyorum..
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

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
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

TAMAM DİKKATLİ BAKTIM, PARDON,, TEK TABLO VARMIŞ.. :D

Kod: Tümünü seç


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..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Birincisi BÜYÜK HARFLERLE yazma
İkincisi sorunun devamı kod tag ları arasında kalmış :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

pardon.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

şöyle bir sonucu nasıl alabilirim..

Kod: Tümünü seç

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..
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

soncu şu şekilde veriyor..

Kod: Tümünü seç

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 
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

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;

Kod: Tümünü seç

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)
Cevapla