dポイントプレゼントキャンペーン実施中!

オラクルSQLの初心者です。

(1)のテーブルから
(2)のテーブルを作成する方法はありますか?教えて下さい。

(2)のテーブルを元に他のテーブルの色々な値を取得したいです。


(1) TEMP1
--------------------------
CODE YEAR_START YEAR_END
--------------------------
 01    08        11
 02    08        09
 03    11        11


(2) TEMP2
---------------------
CODE YEAR
---------------------
 01   08
 01   09
 01   10
 01   11
 02   08
 02   09
 03   11

A 回答 (1件)

こんな感じでしょうか。



--全角でインデントしています
create table temp2 as
select
 code, to_char(to_number(year_start) + rnum , '00') year
from (
 select
  a.code, a.year_start, to_number(a.year_end) - to_number(a.year_start) term
  ,row_number() over(partition by a.code order by rownum) - 1 rnum
 from temp1 a, temp1, temp1)
where rnum <= term;

1.クロスジョインを使って行数を増やし、各codeごとに0からの連番を振ります。
2.start_yearからend_yearまでの期間分の行を取得します。
3.取得した行のstart_yearに1.で振った連番を加算することで期間中のyearが取得できます。

質問する際には使用しているOracleのバージョンまで明記されるといいですよ。
バージョンによって使用できる関数などが違ってきますので。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
説明付きでとても理解し易かったです。

お礼日時:2011/02/07 22:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!