与this question相似,但是我的数据集还有一个包含许多ID的附加列。每个ID都有一个固定时间范围的数据集,某些星期可能缺少数据-我想填写缺失星期的值。
例如,我想要这样:
ID WEEKEND_DAY VALUE
A00 2012-01-01 1
A00 2012-01-08 7
B00 2012-01-08 4
B00 2012-01-15 3
扩展为:
ID WEEKEND_DAY VALUE
A00 2012-01-01 1
A00 2012-01-08 7
A00 2012-01-15 0
B00 2012-01-01 0
B00 2012-01-08 4
B00 2012-01-15 3
我已经填写了一个已知的WEEKEND_DAY(在上述情况下,从2012年1月1日至2012年1月15日,每周一次)的范围。如何执行此操作?
最佳答案
select data.id, weeks.weekend_day, nvl(value, 0) value
from
(
select date '2012-01-01' weekend_day from dual union all
select date '2012-01-08' weekend_day from dual union all
select date '2012-01-15' weekend_day from dual
) weeks
left join
(
select 'A00' id, date '2012-01-01' weekend_day, 1 value from dual union all
select 'A00' id, date '2012-01-08' weekend_day, 7 value from dual union all
select 'B00' id, date '2012-01-08' weekend_day, 4 value from dual union all
select 'B00' id, date '2012-01-15' weekend_day, 3 value from dual
) data
partition by (data.id)
on weeks.weekend_day = data.weekend_day