ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。