ホームページ > データベース > mysql チュートリアル > Oracle で行を列にピボットする方法: DECODE と PIVOT?

Oracle で行を列にピボットする方法: DECODE と PIVOT?

Mary-Kate Olsen
リリース: 2025-01-03 01:09:39
オリジナル
854 人が閲覧しました

How to Pivot Rows to Columns in Oracle: DECODE vs. PIVOT?

Oracle でデータを行から列に変換する方法: ピボット ソリューション

Oracle データベースは、データを行から列に再構築するための多用途の手法 (ピボットと呼ばれるプロセス) を提供します。この変換は、データが狭い形式で編成されており、それをより広いビューで表示する必要がある場合に必要になります。

行から列への変換を実行するために、Oracle では 2 つのメソッドが提供されています。

Oracle 10g の DECODE 関数

以前のバージョンの Oracle (10g) では、DECODE 関数を使用してピボットを実現できます。次のテーブル構造を考えてみましょう。

LOAN NUMBER DOCUMENT_TYPE DOCUMENT_ID
992452533663 Voters ID XPD0355636
992452533663 Pan card CHXPS5522D
992452533663 Drivers licence DL-0420110141769

このデータをピボットするには、次のように DECODE 関数を利用できます。

SELECT
    loan_number,
    MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id,
    MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card,
    MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence
  FROM
    doc_tab
GROUP BY loan_number
ORDER BY loan_number;
ログイン後にコピー

このクエリはローン番号ごとにデータをグループ化し、ネストされた DECODE を使用します。特定の文書タイプに文書 ID を割り当てる関数。 MAX 関数は、ローンと文書の組み合わせごとに必要な単一の値を返します。

Oracle 11g 以降の PIVOT 句

Oracle 11g では、行から列への変換を簡素化するために専用の PIVOT 句が導入されました。次のクエリは、その使用法を示しています。

SELECT *
  FROM doc_tab
PIVOT (
  MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence')
);
ログイン後にコピー

このクエリの PIVOT 句は、変換された結果で作成される列を明示的に定義します。指定されたドキュメント タイプに基づいてデータが自動的にグループ化され、一致するドキュメント ID が結合されます。

Oracle のピボット手法の詳細については、以下のリソースを参照してください。

  • [Timピボットインに関するホールの記事Oracle](https://www.oracle.com/technetwork/database/oracle-magazine/oracle-11g-pivot-127859.html)
  • [両方のソリューションを比較する SQLFiddle の例](https://www .sqlfiddle.com/#!5/7956/2/0)

以上がOracle で行を列にピボットする方法: DECODE と PIVOT?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート