2014-11-20 12 views
0

在Oracle記錄我有5個字段的表:的Oracle SQL以 「創造」 的基礎上田

ID

PublishDate

起始日期

結束日期

價值

這裏的想法是我想'生成'記錄使用與ID,PublishDate,&這些記錄的值相同的值StartDate和EndDate。

即此

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

您可以使用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 
+0

對不起,這是一個通用示例尋找一個通用的解決方案。不能假定任何字段值。對不起,這是我的錯,沒有表明。這似乎也填補了這些日子。 – user441521 2014-11-20 19:56:55

+0

@ user441521對不起,我沒有仔細查看輸出。我已經更新了我的答案。 – Multisync 2014-11-20 20:01:27

+0

你知道這是一個非常緩慢的過程嗎?當我採用你的第二個例子作爲我的具體表格時,查詢還沒有回來。沒有錯誤,只是永遠不會結束。 – user441521 2014-11-20 20:08:56