ホームページ >データベース >mysql チュートリアル >質問の回答を列として使用して MySQL テーブル データをピボットする方法
行としての MySQL ピボット テーブルの列データ
ピボット テーブルは、データを列ベースの形式から行に変換するための強力なツールです。ベースの形式。 MySQL では、この変換は CASE 式と集計関数を組み合わせて使用して実現できます。
特定のデータを、質問の回答が列として表示されるピボット テーブル形式に変換するには、次のクエリを使用できます。
SELECT a.ID, a.user_ID, a.job_id, MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?', MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?', MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id
このクエリでは、CASE 式を使用して、Question テーブルの質問列を確認し、Answers テーブルから対応する回答を返します。次に、集計関数 MAX を使用して、各質問の最大値を見つけます。これは、その質問に提供された回答を表します。
動的ピボット
数値が質問の数が不明または多い場合は、次のコードを使用して動的 SQL ステートメントを生成できます:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN c.question = ''', question, ''' then b.answer end) AS ', CONCAT('`',question,'`') ) ) INTO @sql FROM Question; SET @sql = CONCAT('SELECT a.ID, a.user_ID, a.job_id, ', @sql, ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
このコードは任意の数の質問を処理できる動的 SQL ステートメント。各質問の最大値を列名として連結することにより、SELECT 句を動的に構築します。
クエリの結果は、希望の形式のピボット テーブルになり、各質問の回答が個別の列として表示されます。 .
以上が質問の回答を列として使用して MySQL テーブル データをピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。