我希望在一个字段中查找缺少的条目,按两列分组为分区,然后向前填充缺少的条目。
表我有:
England Q1 1 Dogs
England Q1 2 Dogs
England Q1 3 Dogs
Germany Q1 1 Dogs
Germany Q2 1 Cats
Germany Q2 2 Cats
France Q1 1 Cats
France Q2 1 Cats
因此,假设我的范围是 1 - 3,对于每个唯一的 [国家][季度] 组合,我希望在 [数字] 列中有一个完整的 1,2,3,[动物] 列向前填充上一个条目。
我想要的表:
England Q1 1 Dogs
England Q1 2 Dogs
England Q1 3 Dogs
Germany Q1 1 Dogs
Germany Q1 2 Dogs
Germany Q1 3 Dogs
Germany Q2 1 Cats
Germany Q2 2 Cats
Germany Q2 3 Cats
France Q1 1 Cats
France Q1 2 Cats
France Q1 3 Cats
France Q2 1 Cats
France Q2 2 Cats
France Q2 3 Cats
如果这没有意义,请告诉我!
使用cross join
生成行。 然后使用left join
引入一个值和一个窗口函数来填充缺失的值:
select cq.country, cq.quarter, n.number,
max(t.animal) over (partition by cq.country, cq.quarter) as animal
from (select distinct country, quarter from t) cq cross join
(select distinct number from t) n left join
t
on t.country = cq.country and t.quarter = cq.quarter and t.number = q.number;
注意:这确实依赖于表中数字的所有示例。 它很容易使用:
from (select distinct country, quarter from t) cq cross join
(select 1 as number union all
select 2 as number union all
select 3 as number
) n left join
. . .