MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. SQLのPIVOT完全ガイド|行→列変換の基本・実務・注意点まで解説

SQLのPIVOT完全ガイド|行→列変換の基本・実務・注意点まで解説

「SQLで縦持ちデータを横並びにしたい」

「レポートでカテゴリごとに比較したいが、毎回集計が面倒」

「BIツールに渡す前に、見やすい形に整形したい」

こうした悩みを持つエンジニア・データ担当者は非常に多いです。

本記事では、SQLのPIVOT(ピボット)を使って

👉 行データを列データへ変換し

👉 比較しやすいクロス集計を作る方法

を、基礎から実務レベルまで徹底解説します。

さらに、

  • DBごとの違い(SQL Server / MySQL / PostgreSQL)
  • 動的PIVOTの設計と注意点
  • CASE式での代替方法
  • 実務での失敗例と回避策

まで網羅しています。

👉 この記事を読めば「PIVOTを安全に・正しく・実務で使える」状態になります。

PIVOTとは?行→列に変換するクロス集計の基本

PIVOTの本質

PIVOTとは、縦持ち(行)のデータを横持ち(列)に変換するSQL機能です。

具体的には:

  • カテゴリ列 → 列見出しに変換
  • 数値列 → 集計してセルに配置

つまり、単なる整形ではなく

👉 「集計を伴うデータ再配置」です。

例:縦持ち vs 横持ち

縦持ち(通常のテーブル)

Year | Quarter | Revenue
2024 | Q1      | 1000
2024 | Q2      | 1500

PIVOT後(横持ち)

Year | Q1   | Q2
2024 | 1000 | 1500

👉 比較・分析が一気にしやすくなるのが最大のメリットです。

なぜPIVOTが必要なのか?正規化とレポートのギャップ

データベースは「縦持ち」が正しい

  • 更新・追加しやすい
  • データ整合性を保ちやすい

しかし分析・レポートは「横持ち」が最適

  • 比較しやすい
  • 視覚的に理解しやすい

👉 PIVOTはこのギャップを埋めるための技術です。

PIVOTの基本構文と考え方

構造はたった3つ

PIVOTは次の3要素で決まります:

  • 行として残す列(キー)
  • 列にするカテゴリ
  • 集計する値

SQL Serverの基本構文

SELECT *
FROM (
  SELECT seller, product, amount
  FROM Sales
) AS Source
PIVOT (
  SUM(amount)
  FOR product IN ([A], [B], [C])
) AS P

キーワードの意味

  • SUM(amount) → セルの値(集計)
  • FOR product → 列にする対象
  • IN ([A],[B],[C]) → 出力列

👉 INが「結果の列構造」を決める点が重要です。

実務で使えるPIVOT設計のコツ

① 完成形を先に決める

PIVOTで失敗する最大の原因はこれです。

必ず先に決める:

  • 行:何を1行とするか
  • 列:何を並べるか
  • 値:何を比較するか

② 非ピボット列=グループキー

PIVOTでは:

👉 行に残る列 = 自動的にGROUP BYされる

これを理解していないと:

  • 行が増える
  • 数値がズレる

という事故が起きます。

③ NULLの意味を理解する

PIVOT後のNULLは:

  • ❌ 0ではない
  • ✅ データが存在しない

👉 COALESCEで0に変換するかは要件次第

DB別:PIVOTの使い方の違い

SQL Server / Oracle(ネイティブ対応)

  • PIVOT構文あり
  • 短く書ける
  • 可読性が高い

MySQL / PostgreSQL(非対応)

👉 CASE式で代替

SELECT
  Year,
  SUM(CASE WHEN Quarter='Q1' THEN Revenue END) AS Q1,
  SUM(CASE WHEN Quarter='Q2' THEN Revenue END) AS Q2
FROM Sales
GROUP BY Year;

👉 移植性重視ならCASEが最強

動的PIVOT vs 固定PIVOT

固定PIVOT(推奨)

向いているケース:

  • 四半期(Q1〜Q4)
  • 曜日
  • 固定カテゴリ

👉 安定・安全・高速

動的PIVOT(上級者向け)

必要なケース:

  • カテゴリが増減
  • ユーザー定義項目

注意点(重要)

  • SQLインジェクションリスク
  • 実行計画キャッシュ効かない
  • 列順が不安定

👉 基本は「固定で済むなら固定」

よくある失敗と対策(実務で超重要)

① 集計関数を忘れる

👉 PIVOTは必ず集計が必要

(SUM / COUNT / MAX など)

② INリストのミス

  • 値のスペル違い
  • クオート忘れ
  • 日本語列名

👉 列が出ない・エラーの原因

③ 重複データで数値がズレる

👉 最も危険

対策:

  • 事前にCOUNTで検査
  • 要件に合う集計関数を選ぶ

④ 粒度設計ミス

👉 「1行=何か」を決めていない

UNPIVOT:列→行に戻す方法

UNPIVOTとは

  • 横持ち → 縦持ちに戻す
  • 分析や再集計で使用

重要な注意点

👉 元データには戻らない

理由:

  • PIVOTで集計しているため

    (情報が失われる)

PIVOT vs CASE:どっちを使うべき?

観点 PIVOT CASE
可読性 高い 普通
移植性 低い 高い
保守性 ケース依存 高い

結論

  • 固定レポート → PIVOT
  • 複数DB対応 → CASE

参考(公式・信頼情報)

まとめ:PIVOTは「設計」が9割

重要ポイント

  • PIVOTは単なる整形ではなく集計処理
  • 行・列・値の設計が最重要
  • NULLの扱いを理解する
  • 固定PIVOTが基本
  • 移植性はCASEで担保

👉 SQLスキルの中でも「実務力が出る分野」です。

次にやるべきこと

  • 自分の業務データでPIVOTを実装
  • CASE版と比較して理解を深める
  • 集計粒度の設計を意識する

次のアクション

ここまで読んだ方は、

  • データの「見せ方」にこだわれる
  • 単なるSQLではなく「意思決定のための設計」ができる

という、エンジニアとして非常に重要な視点を持っています。

私たちは、こうした

👉 データ設計・分析・実装まで一貫して考えられるエンジニア

と一緒に、より価値のあるプロダクトを作りたいと考えています。

もし、

  • SQLやデータ設計をもっと深く極めたい
  • 実務レベルの分析基盤に関わりたい

と感じたなら、ぜひ一度、私たちのチームを覗いてみてください。

あなたのその「一歩踏み込んだ理解」が、次のキャリアにつながるはずです。

学んだSQLを、実務で使えるスキルにしたい方へ

本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。

SQLは、文法を理解するだけでなく、

  • どんなデータ構造で使われるのか
  • どんなクエリが現場で求められるのか

を意識して学ぶことで、実践力が大きく変わります。

そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode PLUS という選択肢もあります。

  • SQLを含むWeb・データベース系スキルを体系的に学べる
  • 未経験者でも実務を意識したカリキュラム
  • 受講料・教材費がかからない完全無料の学習環境
  • 完全オンラインでスキマ学習


ZeroCode PLUSについて詳しく見る

※学習内容や進め方を確認するだけでもOKです

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る