在一个存储过程中输入缺少的月份并计算 运行 总数
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 join
或 outer 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;
我如何 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 join
或 outer 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;