mysql一维表转二维表,动态的行转列

转为二维表

一 静态转换
固定表头信息,如:语文和数学已经知道了
SELECT s.name,
Sum(if(s.subject='语文',s.score,0)) '语文',
Sum(if(s.subject='数学',s.score,0)) '数学'
FROM t_student as s
GROUP BY s.name
这里用到 聚合函数,sum与max根据自己需要更换
二 动态转换
不固定表头,即可以多个列。如:可以添加英语进去,也能自动转换
2.1 获取 表头的 sql语句
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('SUM(IF(s.subject=''',s.subject,''',s.score,NULL)) AS ''',s.subject,'''')
)
FROM t_student as s
用到 DISTINCT区唯一值,CONCAT 拼接语句
2.2 动态获取
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('SUM(IF(s.subject=''',s.subject,''',s.score,NULL)) AS ''',s.subject,'''')
)
INTO @sql
FROM t_student as s;
SET @sql = CONCAT('Select s.name, ',@sql,
' FROM t_student as s
GROUP BY s.name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
添加一条英文课程的

效果如:

动态增加列,可以自己去使用一下,谢谢
本文介绍如何在MySQL中将一维表转换为二维表,包括固定表头的静态转换方法和动态增加列的转换方法。静态转换适用于已知所有列名的情况,而动态转换则适用于未知列名或列名可能变化的情况。

1662

被折叠的 条评论
为什么被折叠?



