2016-07-14 10 views
1

Ich versuche, die laufende Summe aus den Werten der vorherigen Monate zu erhalten. Und wenn der Monat Januar ist, möchte ich die Summe aus dem Vorjahr und so weiter bekommen.TSQL 2008 Laufende Summe mit vorherigen Monaten und Jahren

Ich hoffe, dass jemand helfen kann.

WITH CTE AS (SELECT COUNT(LZP.pv_zaaknummer) AS [Aantal LZP] 
, YEAR(LZP.lzp_actief_vanaf) AS Jaar 
, MONTH(LZP.lzp_actief_vanaf) AS Maand 
FROM dm.crm_LZP_Vn_zaaktype_leefzorgplan_registrerenExtensionBase_hist AS LZP 
WHERE LZP.LZP_actief_tot_LDTS > GETDATE() 
GROUP BY YEAR(LZP.lzp_actief_vanaf) 
, MONTH(LZP.lzp_actief_vanaf) 

) 
SELECT a.Jaar 
, a.Maand 
, a.[Aantal LZP] 
, (
    SELECT SUM(b.[Aantal LZP]) 
    FROM CTE AS b 
    WHERE b.Jaar <= a.Jaar 
    ) AS [Running Total 1] 
, (
    SELECT SUM(b.[Aantal LZP]) 
    FROM CTE AS b 
    WHERE b.Jaar <= a.Jaar 
    AND b.Maand <= a.Maand 
    ) AS [Running Total 2] 
FROM CTE AS a 
ORDER BY a.Jaar, a.Maand; 

Ergebnisse schon jetzt, ich bin immer die Summen pro Jahr und dann werden die laufenden Summen pro Jahr:

Jaar Maand Aantal LZP Running Total 1 Running Total 2 
2014 4  11    661   11 
2014 5  52    661   63 
2014 6  70    661   133 
2014 7  76    661   209 
2014 8  39    661   248 
2014 9  86    661   334 
2014 10  112    661   446 
2014 11  120    661   566 
2014 12  95    661   661 
2015 1  57    3327  57 
2015 2  109    3327  166 
2015 3  196    3327  362 
2015 4  200    3327  573 
2015 5  169    3327  794 
2015 6  233    3327  1097 
2015 7  276    3327  1449 
2015 8  224    3327  1712 
2015 9  203    3327  2001 
2015 10  291    3327  2404 
2015 11  296    3327  2820 
2015 12  412    3327  3327 
2016 1  311    6062  368 
2016 2  341    6062  818 
2016 3  476    6062  1490 
2016 4  440    6062  2141 
2016 5  418    6062  2780 
2016 6  500    6062  3583 
2016 7  249    6062  4184 

ich es sein möchte: Sie

Running Total 3 
11 
63 
133 
209 
248 
334 
446 
566 
661 
718 
827 
1023 
1223 
1392 
1625 
1901 
2125 
2328 
2619 
2915 
3327 
3638 
3979 
4455 
4895 
5313 
5813 
6062 

Antwort

0

könnte es ohne Unterabfrage versuchen

....................) 

    SELECT a.Jaar 
    , a.Maand 
    , a.[Aantal LZP],SUM([Aantal LZP]) over (order by jaar) [Running Total 1] 
    , SUM([Aantal LZP]) over (partition by jaar order by maand) [Running Total 2], 
    SUM([Aantal LZP]) over (order by jaar,maand) [Running Total 3] 

    FROM CTE AS a 
    ORDER BY a.Jaar, a.Maand; 

ol d Version

SELECT a.Jaar 
, a.Maand 
, a.[Aantal LZP],(SELECT SUM(b.[Aantal LZP]) 
    FROM CTE AS b 
    WHERE b.Jaar <= a.Jaar 
    ) [Running Total 1], 
    (SELECT SUM(b.[Aantal LZP]) 
    FROM CTE AS b 
    WHERE b.Jaar <= a.Jaar and Maand<=a.Maand 
    ) [Running Total 2] 
, (SELECT SUM(b.[Aantal LZP]) 
    FROM CTE AS b 
    WHERE dateadd(year,jaar-1900,dateadd(month,maand-1,0)) <= dateadd(year,a.jaar-1900,dateadd(month,a.maand-1,0)) 
    ) [Running Total 3] 

FROM CTE AS a 
ORDER BY a.Jaar, a.Maand; 
+0

Dank Nazark aber die OVER (PARTITION BY) Klausel gilt bis 2008, aber die OVER (PARTITION BY ORDER BY) gilt nur für die Jahre 2012 bis 2016. Ich bekomme einen Fehler falsch syntac in der Nähe von –

+0

Ich habe Ihre [Running Total 3] durch die Art, wie Sie für andere Spalten getan haben, bitte, danke – nazark

0

die Lösung gefunden, aber jetzt muss ich es integrieren finden, so dass es zu meinem reportparameters Jaar und Maand reagiert

DECLARE @SalesTbl TABLE (Jaar int, Maand int, Aantal int, RunningTotal int) 
DECLARE @Jaar int, 
     @Maand int, 
     @Aantal int, 
     @RunningTotal int 
SET @RunningTotal = 0 
DECLARE rt_cursor CURSOR 
FOR 

WITH CTE AS 
(SELECT COUNT(LZP.pv_zaaknummer) AS [Aantal LZP] 
, YEAR(LZP.lzp_actief_vanaf) AS Jaar 
, MONTH(LZP.lzp_actief_vanaf) AS Maand 
FROM dm.crm_LZP_Vn_zaaktype_leefzorgplan_registrerenExtensionBase_hist AS LZP 
WHERE LZP.LZP_actief_tot_LDTS > GETDATE() 
GROUP BY LZP.lzp_actief_vanaf 
) 


SELECT A.Jaar, A.Maand, SUM(A.[Aantal LZP]) 
FROM CTE AS A 
GROUP BY Jaar, Maand 
ORDER BY A.Jaar, A.Maand 
OPEN rt_cursor 
FETCH NEXT FROM rt_cursor INTO @Jaar, @Maand, @Aantal 
WHILE @@FETCH_STATUS = 0 
BEGIN 
SET @RunningTotal = @RunningTotal + @Aantal 
INSERT @SalesTbl VALUES (@Jaar, @Maand,@Aantal,@RunningTotal) 
FETCH NEXT FROM rt_cursor INTO @Jaar, @Maand, @Aantal 
END 

CLOSE rt_cursor 

DEALLOCATE rt_cursor 

SELECT * FROM @SalesTbl