• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日付範囲を展開したレコードを作成したい)

日付範囲を展開したレコードを作成する方法

このQ&Aのポイント
  • Oracleでストアドパッケージを作成している場合、与えられた日付範囲を展開してレコードを作成したい場合、ストアド内で実装することが可能です。
  • 与えられたデータから、日付の範囲を展開して新しいレコード群を作成したい場合、ストアドを使用することが一般的です。
  • Typeは使用できないため、展開後のレコードは別途SQLで利用する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

Oracleのバージョンが書いていないのですが、10g以降であればmodel句を使って、こんな感じでどうでしょうか。 SDATE、EDATEのデータ型が不明なのでDate型と言う前提です。 --この部分はテーブルを作るのが面倒なので疑似データを用意しているだけです with tableA as ( select 1 KEY1, 1 KEY2, 1 KEY3, date '2012-07-12' SDATE, date '2012-09-11' EDATE from DUAL union all select 2 KEY1, 2 KEY2, 2 KEY3, date '2012-06-01' SDATE, date '2012-07-31' EDATE from DUAL ) --実際のSQLはここから select key1,key2,key3,to_char(dt, 'yyyy/mm/dd') dt from tableA model partition by (KEY1,KEY2,KEY3) dimension by (0 as IND) measures(trunc(SDATE, 'mm') as DT, months_between(trunc(EDATE,'mm'), trunc(SDATE,'mm')) as TERM) rules(DT[for IND from 0 to TERM[0] increment 1] = add_months(DT[0], cv(IND)));

naktak
質問者

お礼

ありがとうございます。 試して見たところ、思うようなことができそうでした。 ちょっと意味がわからないので、調べながら応用きかせつつ実装してみようかと思います。

その他の回答 (1)

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

Oracle 11g R1以降であれば、Pivot(UnPivot)を駆使すれば実現できると思います。

naktak
質問者

お礼

ありがとうございます。 Pivotを調べてみましたが、どうも駆使の仕方が難しそうなので諦めました・・・。

関連するQ&A