TSQL 2008前几个月和前几年的运行总数

TSQL 2008前几个月和前几年的运行总数,tsql,sql-server-2008-r2,cumulative-sum,Tsql,Sql Server 2008 R2,Cumulative Sum,我试图从前几个月的值中得到运行总数。如果月份是一月,我想得到上一年的总数,以此类推 我希望有人能帮忙 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_registrerenExtensionB

我试图从前几个月的值中得到运行总数。如果月份是一月,我想得到上一年的总数,以此类推

我希望有人能帮忙

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;
我希望是:

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

您可以不使用子查询来完成它

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

    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;
旧版本

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;

您可以不使用子查询来完成它

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

    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;
旧版本

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;

找到了解决方案,但现在我必须找到集成它的方法,以便它响应我的报告参数Jaar和Maand

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

找到了解决方案,但现在我必须找到集成它的方法,以便它响应我的报告参数Jaar和Maand

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

感谢纳扎克,但超额支付条款适用于2008年,但超额支付命令仅适用于2012年至2016年。我收到一个错误syntac near ORDER我已经按照您为其他专栏所做的方式添加了您的[Running Total 3],请参见,谢谢Hanks Nazark,但超额支付条款适用于2008年,但超额支付条款仅适用于2012年至2016年。我收到一个错误syntac near ORDER我已经按照您为其他专栏所做的方式添加了您的[Running Total 3],请参见,谢谢