如何填充以前的值,直到填充新值

时间:2018-09-14 14:36:05

标签: sql-server-2016

我下面有一组数据,其中每个月都在计算计数。 我必须使用此数据创建报告,但是每个月大约在第5个或第6个工作日获得的计数。直到它始终显示NULL或0。 因此,我想填充以前的值,直到获得数月的计数。

因此,如果下面是我的数据集,那么我希望看到> ='2018-08-01'月份的计数14793417。一旦我们获得了这几个月的数据,它就应该输入正确的计数,而不是先前的计数。

Count       yyyymm  Month-Date
15339017    201801  2018-01-01
13832952    201802  2018-02-01
14432701    201803  2018-03-01
14259210    201804  2018-04-01
14863942    201805  2018-05-01
14377470    201806  2018-06-01
14793417    201807  2018-07-01
NULL        NULL    2018-08-01
NULL        NULL    2018-09-01
NULL        NULL    2018-10-01
NULL        NULL    2018-11-01
NULL        NULL    2018-12-01

我尝试了滞后功能,但是我做得不好。

 select distinct 
 [count],
 CASE WHEN [count] IS NULL THEN 
lag([count]) over(partition by [Month-Date])  order by [Month-Date])
else [count] end,
yyyymm
from #table
group by [Month-Date],yyyymm

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

不确定您的#table是什么,但是下面是示例:

WITH ABC 
AS
(
   SELECT 1 as month, 500 as total
   UNION ALL
   SELECT 2, 1000
   UNION ALL 
   SELECT 3, NULL
   UNION ALL 
   SELECT 4 , NULL
)
SELECT month,ISNULL(total,previousMonth)
FROM 
(
   SELECT *, LAG(TOTAL)OVER(ORDER BY month) as previousMonth
   FROM ABC
) as A