我有一个自昨天以来一直在努力的情况。但无法解决它
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
答案 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,适用于这两个数据库。