ホームページ > データベース > mysql チュートリアル > MySQL でデータをアンピボットおよびピボットして列を行に変換する方法

MySQL でデータをアンピボットおよびピボットして列を行に変換する方法

DDD
リリース: 2025-01-09 15:07:41
オリジナル
852 人が閲覧しました

How to Unpivot and Pivot Data in MySQL to Transform Columns into Rows?

MySQL データ ピボットとピボット: 列を行に変換

複数の列 (col1、col2、col3 など) を含むテーブルがあり、それをピボット テーブル形式に変換して、列ではなく行単位でデータを表示したいとします。

MySQL でこれを実現するには、まず UNION ALL クエリを使用してデータをピボットします。このプロセスでは、元の列の値から複数の行が作成されます:

<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip
FROM yourtable
UNION ALL
SELECT id, month, col2 AS value, 'col2' AS descrip
FROM yourtable
UNION ALL
SELECT id, month, col3 AS value, 'col3' AS descrip
FROM yourtable
UNION ALL
SELECT id, month, col4 AS value, 'col4' AS descrip
FROM yourtable;</code>
ログイン後にコピー

UNION ALL クエリ結果:

ID MONTH VALUE DESCRIP
101 Jan A col1
102 feb C col1
101 Jan B col2
102 feb A col2
101 Jan (null) col3
102 feb G col3
101 Jan B col4
102 feb E col4

次に、UNION ALL クエリをサブクエリでラップしてデータをピボットします。集約関数 GROUP BY および CASE ステートメントを使用して、ピボットされていないパースペクティブの構造を目的のパースペクティブ形式に変換します。

<code class="language-sql">SELECT descrip,
MAX(CASE WHEN month = 'jan' THEN value ELSE 0 END) AS jan,
MAX(CASE WHEN month = 'feb' THEN value ELSE 0 END) AS feb
FROM (
    SELECT id, month, col1 AS value, 'col1' AS descrip
    FROM yourtable
    UNION ALL
    SELECT id, month, col2 AS value, 'col2' AS descrip
    FROM yourtable
    UNION ALL
    SELECT id, month, col3 AS value, 'col3' AS descrip
    FROM yourtable
    UNION ALL
    SELECT id, month, col4 AS value, 'col4' AS descrip
    FROM yourtable
) AS src
GROUP BY descrip;</code>
ログイン後にコピー
ピボットクエリの結果:

DESCRIP JAN FEB
col1 A C
col2 B A
col3 0 G
col4 B E
このプロセスにより、テーブル構造が列から行に効果的に変換され、より簡潔かつ明確な方法でデータを表示できるようになります。

以上がMySQL でデータをアンピボットおよびピボットして列を行に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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