MS SQL ile kümülatif toplam bulan sorgu

Sql ile her satırda kümülatif toplam alan sorguda genellikle id sırasına göre kümülatif toplam alınır. Ancak her zaman id sıralaması işe yaramayabilir, örneğin tarih sıralaması gerekirse bu durumda aşağıdaki gibi istenen sıralamaya göre sıra no oluşturup toplam almak gerekir. Ayrıca bazı tablolarda da id alanı olmayabilir. Aşağıdaki sorgu id yerine sıra no kullanılarak bu sorunda çözülmüş oluyor.
Geçici tablo oluşturma
SELECT 1 AS ID,'2015-02-10' AS TARIH,10 TUTAR
INTO #TABLO
UNION
SELECT 2 AS ID,'2015-02-15' AS TARIH,20 TUTAR
UNION
SELECT 3 AS ID,'2015-01-10' AS TARIH,10 TUTAR
UNION
SELECT 4 AS ID,'2015-03-15' AS TARIH,40 TUTAR
UNION
SELECT 5 AS ID,'2015-01-01' AS TARIH,30 TUTAR
Oluşturulan tablo aşağıdaki gibidir.
SELECT * FROM #TABLO
ID | TARIH | TUTAR |
1 | 10.02.2015 | 10 |
2 | 15.02.2015 | 20 |
3 | 10.01.2015 | 10 |
4 | 15.03.2015 | 40 |
5 | 01.01.2015 | 30 |
Kümülatif / Birimli toplam bulan sorgu
SELECT T1.SIRA,T1.TARIH,T1.ID,T1.TUTAR,SUM(T2.TUTAR) AS KUMULATIF_TOPLAM
FROM
(SELECT RANK() OVER(ORDER BY TARIH,ID) AS SIRA,TARIH,ID,TUTAR
FROM #TABLO) AS T1
INNER JOIN
(SELECT RANK() OVER(ORDER BY TARIH,ID) AS SIRA,TARIH,ID,TUTAR
FROM #TABLO) AS T2
ON T2.SIRA<=T1.SIRA
GROUP BY T1.SIRA,T1.TARIH,T1.ID,T1.TUTAR
ORDER BY T1.SIRA
Sonuç :
SIRA | TARIH | ID | TUTAR | KUMULATIF_TOPLAM |
1 | 01.01.2015 | 5 | 30 | 30 |
2 | 10.01.2015 | 3 | 10 | 40 |
3 | 10.02.2015 | 1 | 10 | 50 |
4 | 15.02.2015 | 2 | 20 | 70 |
5 | 15.03.2015 | 4 | 40 | 110 |