2016-08-13 8 views
2

データのセットを取得し、既存のフィールドに基づいて日付行を追加して展開したいと考えています。例えば、私が持っている場合は、以下の表(TABLE1):1行のクエリを作成する方法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 

私は私の毎月の日付を導出するためのメカニズムを持っていますが、どのように私はTABLE2を作るためにTABLE1からデータを抽出します。ここで簡単なクエリですが、もちろん、私はORA-01427 single-row subquery returns more than one rowを期待どおりに取得します。一緒にこの2つを置くために、クエリを整理する方法だけでわからない:

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

私はこれを行うカント実現が、私は2つのピースを入れてするかどうかはわかりません。レコードを一括処理して、一度に1つの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

関連する問題