添加缺失记录

时间:2014-07-03 16:25:35

标签: sql oracle

我有一个自昨天以来一直在努力的情况。但无法解决它

          Table 1
LN_ID     DATE         CODE
500      01-JUN-2014   00
500      01-MAY-2014   01
500      01-APR-2014   02
500      01-MAR-2014   00
500      01-FEB-2014   04
500      01-JAN-2014   03

501      01-JUN-2014   00
501      01-MAY-2014   01
501      01-APR-2014   02
501      01-MAR-2014   00

502      01-JUN-2014   00
502      01-MAY-2014   01
502      01-APR-2014   02
502      01-MAR-2014   00
502      01-FEB-2014   04

这是所有一张表,每笔贷款都有多个记录。

贷款500从6月到1月有6条记录和

贷款501只有4条记录,从Jun到MAR和

Loan 502只有5条记录,从Jun到FEB

我想为所有贷款插入缺少的记录JUN到JAN。并希望将代码设为XX 我希望看到这样的表;

          Table 1 (needed)
LN_ID     DATE         CODE
500      01-JUN-2014   00
500      01-MAY-2014   01
500      01-APR-2014   02
500      01-MAR-2014   00
500      01-FEB-2014   04
500      01-JAN-2014   03

501      01-JUN-2014   00
501      01-MAY-2014   01
501      01-APR-2014   02
501      01-MAR-2014   00
501      01-FEB-2014   XX
501      01-JAN-2014   XX

502      01-JUN-2014   00
502      01-MAY-2014   01
502      01-APR-2014   02
502      01-MAR-2014   00
502      01-FEB-2014   04
502      01-JAN-2014   XX

1 个答案:

答案 0 :(得分:1)

您可以通过cross join生成记录。然后,您可以使用left join返回原始数据以获取代码。

对于您问题中的数据:

select l.ln_id, d.date, coalesce(t1.code, 'XX') as code
from (select distinct ln_id from table1) l cross join
     (select distinct date from table1) d left outer join
     table1 t1
     on t1.ln_id = l.ln_id and t1.date = d.date;

请注意,您的查询的标记方式同时表明MySQL和Oracle。以上是标准SQL,适用于这两个数据库。