ホームページ > データベース > mysql チュートリアル > MySQL で列を行にアンピボットするにはどうすればよいですか?

MySQL で列を行にアンピボットするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-20 05:41:08
オリジナル
1002 人が閲覧しました

How to Unpivot Columns into Rows in MySQL?

MySQL で列を行に変換するためのトリック

MySQL でカラムオーガナイズされたデータを操作する場合、データを行で表示する形式に変換する必要がある場合があります。このプロセスはアンピボットと呼ばれます。

質問:

次の形式を考えてみましょう:

<code>ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2</code>
ログイン後にコピー

目標は、列を行に変換して、次の構造のテーブルを取得することです:

<code>ID | 值 | 列名
1  | a1 | a
1  | b1 | b
1  | c1 | c
2  | a2 | a
2  | b2 | b
2  | c2 | c</code>
ログイン後にコピー

解決策:

他のデータベースとは異なり、MySQL には巻き戻し関数が組み込まれていません。必要な結果を得るには、UNION ALL クエリを使用して、各列を選択的に行に変換する個別のクエリを組み合わせることができます。

<code class="language-sql">SELECT id, 'a' AS col, a AS value
FROM yourtable
UNION ALL
SELECT id, 'b' AS col, b AS value
FROM yourtable
UNION ALL
SELECT id, 'c' AS col, c AS value
FROM yourtable;</code>
ログイン後にコピー
このクエリは、各列に 1 つずつ、合計 3 つのデータ セットを生成します。各グループには、ID、列名、および対応する値が含まれます。

クロス結合を使用する:

もう 1 つの方法は、

を使用することです:CROSS JOIN

<code class="language-sql">SELECT t.id,
       c.col,
       CASE c.col
           WHEN 'a' THEN a
           WHEN 'b' THEN b
           WHEN 'c' THEN c
       END AS data
FROM yourtable t
CROSS JOIN
(
    SELECT 'a' AS col
    UNION ALL SELECT 'b'
    UNION ALL SELECT 'c'
) c;</code>
ログイン後にコピー
この場合、

は、CROSS JOIN の行と列名を生成するサブクエリの行との間にデカルト積を作成します。 yourtable ステートメントは、各列名を対応する列値にマップします。 CASE

どちらの方法でもデータを効果的に巻き戻し、必要な行ベースの構造を実現します。

以上がMySQL で列を行にアンピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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