ホームページ >データベース >mysql チュートリアル >行の値から動的な列名を使用して MySQL テーブルをピボットするにはどうすればよいですか?
列名としての MySQL 動的行値
MySQL には、動的な行値を列名として持ち、ピボット テーブル形式で表示されるレガシー テーブル データに対するネイティブ ピボット機能がありません。ただし、GROUP_CONCAT()
を使用した準備済みステートメントは、望ましい結果を達成するのに役立ちます。
サンプルテーブル:
<code class="language-sql">id name value ------------------------------ 0 timezone Europe/London 0 language en 0 country 45 0 something x 1 timezone Europe/Paris 1 language fr 1 country 46</code>
ターゲット出力:
<code>id timezone language country something --------------------------------------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46</code>
次のように準備されたステートメントを構築します:
<code class="language-sql">SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' SEPARATOR ''), ' FROM `table` ', GROUP_CONCAT(' LEFT JOIN `table` AS `t_', REPLACE(name, '`', '``'), '` ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name) SEPARATOR ''), ' GROUP BY `table`.id' ) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t; PREPARE stmt FROM @qry; EXECUTE stmt;</code>
このクエリは、SELECT
を使用して同じ LEFT JOIN
値を持つ行を結合し、一意の id
値に対応する値を抽出する name
ステートメントを動的に生成します。次に、id
を押して結果をグループ化し、目的のピボット テーブル形式を生成します。
MySQL にはネイティブのピボット機能がありませんが、このメソッドは、構造化された方法で動的な列名を持つレガシー テーブルからデータを取得する方法を提供します。
以上が行の値から動的な列名を使用して MySQL テーブルをピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。