Oracle Sql to" create"基于字段的记录

时间:2014-11-20 19:50:07

标签: oracle

在Oracle中,我有一个包含5个字段的表:

ID

PublishDate

开始日期

结束日期

这里的想法是,我希望“生成”StartDate和EndDate之间的记录,其值与ID,PublishDate和&这些记录的价值。

即这个

10, 11/20/2014, 1/1/2016, 3/1/2016, 10

变成

10, 11/20/2014, 1/1/2016, 10
10, 11/20/2014, 2/1/2016, 10
10, 11/20/2014, 3/1/2016, 10

所以我在一个proc中完成了这个,我循环遍历每条记录并生成记录,但我想知道是否有SQL方法可以做这样的事情?

1 个答案:

答案 0 :(得分:1)

您可以使用CONNECT BY子句进行分层查询:

select * from (select 10 id, '11/20/2014' PublishDate, '1/1/2016' StartDate, '3/1/2016' EndDate, 10 value 
               from dual connect by level <= 10);

CONNECT BY level <= N将为表格的每一行生成N份副本

对于你的情况:

SELECT ID, PublishDate, StartDate + lvl, VALUE
FROM your_tab
     JOIN (SELECT LEVEL - 1 lvl FROM dual
           CONNECT BY LEVEL <= (SELECT round(MAX(trunc(EndDate) - trunc(StartDate))) FROM your_tab)
          )
    ON trunc(EndDate) - trunc(StartDate) >= lvl