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

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;

添加一条英文课程的
在这里插入图片描述
效果如:
在这里插入图片描述
动态增加列,可以自己去使用一下,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值