mysql pivotテーブル列データとしての列
ピボットテーブルは、列ベースの形式から行ベースの形式にデータを変換するための強力なツールです。 MySQLでは、この変換は、集約関数と組み合わせてケース式を使用して達成できます。 a.user_id、 A.job_id、 max(c.question = 'これはこれですか?'、b.answer end) 'これはこれですか?'、 max(c.question = 'またはthis?' then b.answer end 'またはthis?'、 max(c.question = 'or that?' then b.answer end ')またはそれ? ' 結果からa 内側の結合回答b on a.id = b.fk_result_id 内部結合質問c b.fk_question_id = c.id A.IDによるグループ、 a.user_id、 A.job_id
このクエリでは、ケース式を使用して、質問表の疑問列を確認し、回答表から対応する回答を返します。集約関数Maxは、各質問の最大値を見つけるために使用されます。これは、その質問に対して提供される答えを表します。 選択します group_concat(異なる concat( 'Max(Case When C.Question =' ''、 質問、 ''それからb.answer end)as '、 concat( '`'、question、 '`') )) )@sqlに 質問から; @sql = concat( 'select a.id、 a.user_id、 A.job_id、 '、@sql、' 結果からa 内側の結合回答b on a.id = b.fk_result_id 内部結合質問c b.fk_question_id = c.id A.IDによるグループ、 a.user_id、 a.job_id '); @sqlからstmtを準備します。 STMTを実行します。 deallocate stmt;
このコードは、任意の数の質問を処理できる動的なSQLステートメントを生成します。各質問の最大値を列名として連結することにより、選択句を動的に構築します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3