ホームページ >データベース >mysql チュートリアル >質問の回答を列として使用して MySQL テーブル データをピボットする方法

質問の回答を列として使用して MySQL テーブル データをピボットする方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 19:31:14468ブラウズ

How to Pivot MySQL Table Data with Question Answers as Columns?

行としての 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。