我在Oracle数据库中有下表
src_tbl
id from_date thru_date
------------------------------
1 01-JAN-2015 31-oct-2016
2 01-APR-2016 31-DEC-2015
3 01-JUL-2014 31-DEC-2016
Run Code Online (Sandbox Code Playgroud)
我想将src_tbl中的行插入到目标表中,并在from_date和thru_date之间为每个月创建一行,如下所示:
tgt_tbl
--------------------------
id month
1 JAN-2015
1 FEB-2015
1 MAR-2015
...
...
2 APR-2016
2 MAY-2016
2 JUN-2016
...
...
3 JUL-2014
3 AUG-2014
3 SEP-2014
3 OCT-2014
...
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
select id, to_char( add_months(from_date, level - 1), 'MON-yyyy' ) as mth
from src_tbl
connect by level <= months_between(thru_date + 1, from_date)
and prior id = id
and prior sys_guid() is not null
;
Run Code Online (Sandbox Code Playgroud)
注意:正如评论中所讨论的,我假设"环境"保证thru_date永远不会比from_date任何更早id.如果是,则此查询将生成一行(对于from_date月份),或许它应该不生成.理想情况下,逻辑条件由基表上的检查约束强制执行.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |