SQL Serverda Kümülatif Toplam Nasil Alinir

Bazi raporlama ihtiyaçlarinda kümülatif toplam verisine ihtiyaç duyariz. Bu kisa makalemizde Cursor veya döngü kullanmadan, belirli bir alana göre veriyi siralayarak bir kolonun kümülatif olarak toplamini nasil alacagimizi anlatacagim.

Ilk olarak örnegimizde kullanacagimiz tabloyu ve örnek datalari olusturalim. Bunun için asagidaki scripti kullanalim.

create table Ornek_AylikGelir
(
tarih datetime,
Toplam int,
)

insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.01',100)
insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.02',50)
insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.03',20)
insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.04',80)
insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.05',100)
insert into Ornek_AylikGelir(tarih,Toplam) values('2012.05.06',200)

Yukaridaki script sonucunda tablomuzda asagidaki kayitlar yer aldi.

select * from Ornek_AylikGelir
tarih Toplam
2012-05-01 00:00:00.000 100
2012-05-02 00:00:00.000 50
2012-05-03 00:00:00.000 20
2012-05-04 00:00:00.000 80
2012-05-05 00:00:00.000 100
2012-05-06 00:00:00.000 200

.

Simdi yeni bir sorgu ile Toplam kolonunda yazan miktari tarihe göre kümülatif olarak hesaplayip hemen yanina yazalim. Bu islem için tablomuza iki kez gidecegiz. Her kayit ayni tabloya tekrar gidip kendi tarihinden küçük olan kayitlardaki Toplam alanini toplayacagiz.

 SELECT t2.tarih,
         t2.Toplam,
         (
			SELECT SUM(t1.Toplam) FROM Ornek_AylikGelir t1 
			WHERE t1.tarih <= t2.tarih
         ) AS KumulatifToplam
    FROM Ornek_AylikGelir t2
ORDER BY t2.tarih
tarih Toplam KumulatifToplam
2012-05-01 00:00:00.000 100 100
2012-05-02 00:00:00.000 50 150
2012-05-03 00:00:00.000 20 170
2012-05-04 00:00:00.000 80 250
2012-05-05 00:00:00.000 100 350
2012-05-06 00:00:00.000 200 550

.

Tags:

5 thoughts on “SQL Serverda Kümülatif Toplam Nasil Alinir

  • hasan hocam verdi?in verilerlede kümülatif toplam hesaplayacak bir alan yok,

    bana elinizdeki verinin ve olmasyny istedi?iniz halinin örne?ini yazyn, sqlini olu?turayym size.
    e?er maksadynyz il bazynda tarihe göre kümülatif toplam ise zaten makaledeki sorguya sadece il bazynda gruplama koymanyz yeterli

    gezgin2016-06-17 12:23:32

  • Merhaba, 

    tarih de?il de string bir alana göre aldyrmak isteseydik nasyl yapabilirdik, mesela il bazynda saty? tutarlary ve yanynda da kümülatif toplam gibi.(ya da muhasebe hesaplary gibi) 

    il              satis_tutari           ktoplam
    ______   _________          ________
    istanbul   5000                    5000
    ankara     700                      5700
    izmir        3000                    8700

    gibi.

    Tesekkurler.    
  • Iki ayni tarih olma ihtimali çok yüksek bu durumlar için tablona bir alan daha eklemelisin bu alan kayitin olusturulma tarih saat sn salise (DateTime.Now()) bilgilerini tutacak.  

    SELECT t2.tarih,
             t2.Toplam,
             (
                SELECT SUM(t1.Toplam) FROM Ornek_AylikGelir t1
                WHERE t1.tarih <= t2.tarih AND t1.CreateDateTime<=t2.CreateDateTime
    ORDER BY t1.CreateDateTime
             ) AS KumulatifToplam
        FROM Ornek_AylikGelir t2
    ORDER BY t2.tarih
  • tarih ayny oldu?u zaman kümülatif toplamda problem oluyor. bunun için bir çözüm varmy?

  • Bu durum karsimiza çiktigi zaman çok zaman alabilir. Çok iyi bir örnek olmus. Kisa ve etkili bir sql cümlesi.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir