Oracleでストアドパッケージを作っています。
key1 key2 key3 sdate edate
1 1 1 2012/07/12 2012/09/11
2 2 2 2012/06/01 2012/07/31
こんなデータがあった時、以下のように日付の範囲を展開した
レコード群を得たいのですが、やり方が思いつきません。
key1 key2 key3 date
1 1 1 2012/07/01
1 1 1 2012/08/01
1 1 1 2012/09/01
2 2 2 2012/06/01
2 2 2 2012/07/01
事情により、Typeは使えません。
展開後、別途SQLで利用するつもりです。
ストアド内だけで実装可能でしょうか?
No.1
- 回答日時:
Oracle 11g R1以降であれば、Pivot(UnPivot)を駆使すれば実現できると思います。
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)));
ありがとうございます。
試して見たところ、思うようなことができそうでした。
ちょっと意味がわからないので、調べながら応用きかせつつ実装してみようかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript SQLでデータベースから返ったデータのJSON形式生成について 1 2022/04/06 12:25
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- CPU・メモリ・マザーボード USB Key 2 2022/07/06 14:25
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL*PLUSでの分秒までの表示の仕方
-
date型のインデックス
-
日付範囲を展開したレコードを...
-
date型へのinsertについて
-
基本的なことですが;
-
SQLです。下記の問合せを行うク...
-
SQL Server で 翌月10日を取...
-
今日の日付が入った行のデータ...
-
likeとsubstrの使いわけについて
-
エクセルVBAでUserFormを起動し...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
sqlplusでヘッダーが付かない
-
SQLで部分的にGROUP BYしたいとき
-
時間項目を60進数から10進数へ...
-
あいまい検索のパフォーマンス...
-
Texの枠囲み調節
-
wordの差し込み印刷での日付表示
-
テーブルの主キーをdate型...
-
今まで使ってたユーザーフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL*Loaderでのsysdate使用
-
SQL*PLUSでの分秒までの表示の仕方
-
SQL*Loader フォーマット変換...
-
DB2でのシステム日付のinsert、...
-
日付型カラムへのデータINSERT
-
ALTER SESSIONについて
-
エクセル上の 2017/10/27 7:01...
-
SQLです。下記の問合せを行うク...
-
to_date使用時に発生するエラー...
-
SQL Server で 翌月10日を取...
-
EXCELでの時間計算(休憩時間の...
-
SQL Sever での日付の差の求め...
-
(日付 - 日付)/数値
-
SQLエラーについて
-
日付範囲を展開したレコードを...
-
date型のインデックス
-
PL/SQLにて勤務時間の計算
-
DB2のTimestamp型
-
基本的なことですが;
-
実行エラー 3075:クエリ式`作...
おすすめ情報