首页 > 解决方案 > 使用 select 语句查询以填充空行

问题描述

我正在尝试使用 1 月份的数据填充剩余月份的空白期初余额单元格。也有缺失的月份。我尝试了以下方法,即使完成初始查询也需要花费大量时间。

事实数据数量约为一百万。

我尝试的方法如下,

  1. 创建仅包含 1 月 EOM 日期的日期表
  2. 使用与创建日期表的事实数据不同的帐户密钥进行交叉连接。
  3. 然后尝试使用另一个左连接查询填充剩余字段,方法是使用 ACC+EOM 构建动态唯一键。

这种方法需要太多时间来执行。请有任何建议

输入

输入数据

需要输出

输出

标签: oracle

解决方案


您可以使用递归 CTE 或仅使用列表来生成月份。然后使用cross joinandleft join引入数据和窗口函数来填充您要填充的缺失值:

with dates as (
      select eomonth(convert(date, '2020-01-01')) as eom
      union all
      select eomonth(dateadd(1, month, eom))
      from dates
      where eom < '2020-12-01'
     )
select a.acc_code, dates.eom,
       max(t.ob) over (partition by a.acc_code) as ob,
       t.trans
from yyyymm cross join
     (select distinct acc_code from t) a left join
     t
     on t.eom = dates.eom and t.acc_code = a.acc_code

推荐阅读