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],请参见,谢谢