在一个存储过程中输入缺少的月份并计算 运行 总数

Enter missing month and calculate running total in one stored procedure

我如何 select 来自这个 table

的数据
Yr     Month    El1       Value    
----   ------   -------   ------

2017   2        AT010     100        
2017   3        AT010     100         
2017   4        AT010     50        
2017   5        AT010     150     
2017   3        BE020     10      
.......

然后按照下面的方式插入另一个table

Yr     Month    El1       Value    
----   ------   -------   ------

2017   0        AT010     0        
2017   1        AT010     0         
2017   2        AT010     100        
2017   3        AT010     200  
2017   4        AT010     250         
2017   5        AT010     400        
2017   6        AT010     400        
2017   7        AT010     400        
2017   8        AT010     400    
2017   9        AT010     400  
2017   10        AT010     400    
2017   11        AT010     400        
2017   12        AT010     400    
2017   0        BE020     0  
2017   1        BE020     0    
2017   2        BE020     0  
2017   3        BE020     10   
2017   4        BE020     10   
2017   5        BE020     10   
2017   6        BE020     10   
2017   7        BE020     10   
2017   8        BE020     10    
2017   9        BE020     10   
2017   10        BE020    10   
2017   11        BE020    10    
2017   12        BE020    10 

.......

我正在尝试插入从 0 到 12 的缺失月份并同时计算 运行 总数。 我使用 this 建议进行 运行 总计算;但是,我不知道如何输入缺少的月份。 此代码将在日常 ETL 作业的存储过程中使用。

嗯。 . .生成行,然后使用 left joinouter apply 引入值。这是一种方法:

with yyyymm as (
      select 2017 as yr, 1 as mom
      union all
      select yr, mon + 1
      from yyyymm
      where mon + 1 <= 12
     )
select yyyymm.yr, yyyymm.mon, coalesce(e.el1, 0) as el1
from yyyymm cross join
     (select distinct el1 from t) e outer apply
     (select sum(t.value)
      from t
      where t.el1 = e.el1 and
            t.yr = yyyy.yr and
            t.month <= yyyy.mon
     ) tt
order by e.el1, yyyy.yr, yyyy.month;