数据库行列转置的实现_Mysql/Oracle/Sqlserver/Pgsql

环境是Mysql8.03,用mysql全系列都可以,可视化页面是Navicat;
使用学生考试成绩表作为参考对数据库行列转置进行说明,因为只使用到CASE WHEN函数,未涉及复杂函数,所以适应于SqlServer、Oracle、Pgsql等任何关系型数据库
建表语句如下:

create table StuGrade
(
	Sname        char(10), -- 学生姓名
	Cname        char(10), -- 课程名称
	Grade        float     -- 分数
);

insert into StuGrade values('刘亦菲','数学',92);
insert into StuGrade values('刘亦菲','数据库',85);
insert into StuGrade values('刘亦菲','信息系统',92);
insert into StuGrade values('周杰伦','数学',66);
insert into StuGrade values('周杰伦','数据库',83);
insert into StuGrade values('周杰伦','信息系统',66);
insert into StuGrade values('周润发','信息系统',59);
insert into StuGrade values('梁朝伟','信息系统',66);

具体实现语句,使用SUM()

SELECT 
    Sname,
	SUM(CASE Cname WHEN '数据库' THEN grade END)   AS '数据库',
	SUM(CASE Cname WHEN '数学' THEN grade END)     AS '数学' ,
	SUM(CASE Cname WHEN '信息系统' THEN grade END) AS '信息系统'
FROM StuGrade 
GROUP BY Sname; 

使用MAX()

SELECT 
    Sname,
	MAX(CASE Cname WHEN '数据库' THEN grade END)   AS '数据库',
	MAX(CASE Cname WHEN '数学' THEN grade END)     AS '数学' ,
	MAX(CASE Cname WHEN '信息系统' THEN grade END) AS '信息系统'
FROM StuGrade 
GROUP BY Sname; 

因为SUM和MAX都是起到聚合作用,且满足条件的只有一个值,所以两者的效果是一样的,结果如下:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值