首页 >数据库 >mysql教程 >如何将 MySQL 表列数据转换为行?

如何将 MySQL 表列数据转换为行?

Barbara Streisand
Barbara Streisand原创
2024-12-25 19:37:10969浏览

How to Pivot MySQL Table Column Data into Rows?

MySQL 将表列数据透视为行

要在 MySQL 中将表列数据透视为行,您可以使用 MAX( 的组合) 和 CASE 函数以及 GROUP BY 子句。以下是一般语法:

SELECT
  GROUP_BY_COLUMNS,
  MAX(CASE WHEN condition1 THEN column1 END) AS column1_alias,
  MAX(CASE WHEN condition2 THEN column2 END) AS column2_alias,
  ...
FROM TABLE
GROUP BY GROUP_BY_COLUMNS

在提供的示例中,您有三个表: Question,其中包含调查问卷问题;结果,将用户与工作联系起来;和答案,其中包含用户对问题的回答。

要将问题答案转为每个结果集的列,您可以使用以下查询:

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

此查询结合了答案表、问题表基于 fk_question_id 字段,结果表基于 fk_result_id 字段。然后,它按 ID、user_ID 和 job_id 列对结果进行分组,并且对于每个组,它使用 MAX() 函数和 CASE 语句计算每个问题的最大答案。

或者,如果您有未知数量的问题,您可以使用动态 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包含每个问题所需列的变量,并将其作为准备好的语句执行。

这些查询将返回问题答案作为每个结果集的列,允许您以用户友好的格式显示它们。

以上是如何将 MySQL 表列数据转换为行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn