SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Oracle 11g R1新機能のPivotとUnPivot

select文で縦横変換

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード SourceCode (2.6 KB)

 Oracle 11g R1新機能のPivotとUnPivotについて、基本事項から使用例まで、SQLのイメージを交えて解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 Oracle 11g R1新機能のPivotUnPivotについて、基本事項から使用例まで、SQLのイメージを交えて解説します。

対象読者

  • OracleのPivotUnPivotを使いたい方
  • OracleのSQLの理解を深めたい方

必要な環境

 本稿で扱うSQLは、Oracle 11.1.0.6.0で動作確認しました。SQL Server 2005以降でも応用が可能です。

1. PivotとUnPivotとは

 PivotUnPivotはOracle 11g R1の新機能で、select文での行列変換を容易に行うことができます。ちなみにPivotUnPivotは、SQL Server 2005以降でも使用できます。英和辞典によるとPivotの意味は、動詞では「旋回する」、名詞では「中心,軸,旋回軸,かなめ」です。

 下記のOracleのselect文の評価順序において、PivotUnPivotfrom句の一部として評価されるようです。

select文の評価順序
 1. from句
 2. where句 (結合条件)
 3. start with句
 4. connect by句
 5. where句 (行のフィルタ条件)
 6. group by句
 7. having句
 8. model句
 9. select句
10. union、minus、intersectなどの集合演算
11. order by句

 PivotUnPivotfrom句の一部として評価されるので下記のようなselect文も実行できます。PivotUnPivotした結果に表別名を付けることもできます。

PivotとUnPivotはfrom句の一部として評価
select * from dual
unpivot(vals1 for key1 in(dummy,dummy,dummy,dummy,dummy))
unpivot(vals2 for key2 in(key1,key1))
pivot(max(key2) for vals2 in('DUMMY' as newDummy))
pivot(max(newDummy) for vals1 in('DUMMY' as newDummy2)) a
Join dual b
  on a.newDummy2 is null;
出力結果
newDummy2 DUMMY
X null
PivotとUnPivotはfrom句の一部として評価
select *
  from (select RowNum as r1,RowNum as r2 from dict where RowNum <= 2) a
  Join dual b on 1=1
UnPivot(Val for Keys in(r1,r2));
出力結果
DUMMY Keys Val
X R1 1
X R2 1
X R1 2
X R2 2

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
2. Pivotで行列変換 (行⇒列)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

山岸 賢治(ヤマギシ ケンジ)

趣味が競技プログラミングなWebエンジニアで、OracleSQLパズルの運営者。AtCoderの最高レーティングは1204(水色)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4985 2010/04/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング