2016-08-13 60 views
2

我想獲取一組數據並通過添加基於現有字段的日期行來擴展它。舉例來說,如果我有如下表(TABLE1):如何使單行查詢包括Oracle中的多行

ID NAME YEAR 
1 John 2001 
2 Jim 2012 
3 Sally 2005 

我想借此數據,並把它變成另一張表,但它擴大到包括一組個月的(並從那裏我可以補充每月信息)。如果我只看了第一條記錄(John)我的結果將是:

ID NAME YEAR MONTH 
1 John 2001 01-JAN-2001 
1 John 2001 01-FEB-2001 
1 John 2001 01-MAR-2001 
... 
1 John 2001 01-DEC-2001 

我有機制來獲得我每月的日期,但我怎麼提取TABLE1數據進行TABLE2。這只是一個快速查詢,但當然,我可以按照預期得到ORA-01427 single-row subquery returns more than one row。只是不知道如何組織查詢,這兩件放在一起:

select id, 
    name, 
    year, 
    book_cd, 
    (SELECT ADD_MONTHS('01-JAN-'|| year, LEVEL - 1) 
      FROM DUAL CONNECT BY LEVEL <= 12) month 
from table1 ; 

我意識到我不能這樣做,但我不知道如何將兩片放在一起。我計劃批量處理記錄,所以它一次不會是一個ID感謝您的幫助。

回答

2

您可以使用交叉聯接:

select t.id, 
     t.name, 
     t.year, 
     t.book_cd, 
     ADD_MONTHS(to_date(t.year || '-01-01', 'YYYY-MM-DD'), m.rn) as mnth 
    from table1 t 
cross join (select rownum - 1 as rn 
       from dual 
      connect by rownum <= 12) m 
+0

感謝,這正是我一直在尋找。我需要調查這個交叉連接功能。我第一次聽說它! – Mark

相關問題