场景1 行转换列
1、表结构和数据
/*
navicat premium data transfer
source server : 本地
source server type : mysql
source server version : 80027
source host : localhost:3306
source schema : school
target server type : mysql
target server version : 80027
file encoding : 65001
date: 13/06/2024 14:50:51
*/
set names utf8mb4;
set foreign_key_checks = 0;
-- ----------------------------
-- table structure for score
-- ----------------------------
drop table if exists `score`;
create table `score` (
`stu_no` varchar(128) character set utf8 collate utf8_general_ci not null comment '学号',
`course_no` varchar(128) character set utf8 collate utf8_general_ci not null comment '课程号',
`score_prize` decimal(4, 1) null default null comment '成绩',
primary key (`stu_no`, `course_no`) using btree
) engine = innodb character set = utf8 collate = utf8_general_ci row_format = dynamic;
-- ----------------------------
-- records of score
-- ----------------------------
insert into `score` values ('0001', '0001', 40.0);
insert into `score` values ('0001', '0002', 50.0);
insert into `score` values ('0001', '0003', 48.0);
insert into `score` values ('0002', '0001', 40.0);
insert into `score` values ('0002', '0002', 30.0);
insert into `score` values ('0002', '0003', 99.0);
insert into `score` values ('0003', '0001', 70.0);
insert into `score` values ('0003', '0002', 77.0);
insert into `score` values ('0003', '0003', 60.0);
set foreign_key_checks = 1;
2、效果图说明,第一列用户信息stu_no,第二列课程号course_no,第三列课程成绩

| stu_no | 语文 | 数学 | 英语 |
|---|---|---|---|
| 0001 | 40.0 | 50.0 | 48.0 |
| 0002 | 40.0 | 30.0 | 99.0 |
| 0003 | 70.0 | 77.0 | 60.0 |
3、实现sql
select stu_no,
sum(if(course_no = '0001', score_prize, 0)) as '语文',
sum(if(course_no = '0002', score_prize, 0)) as '数学',
sum(if(course_no = '0003', score_prize, 0)) as '英语'
from score
group by stu_no;
场景2:列转换行
1、准备数据表结构和数据
/*
navicat premium data transfer
source server : 本地
source server type : mysql
source server version : 80027
source host : localhost:3306
source schema : school
target server type : mysql
target server version : 80027
file encoding : 65001
date: 13/06/2024 14:54:37
*/
set names utf8mb4;
set foreign_key_checks = 0;
-- ----------------------------
-- table structure for cjs
-- ----------------------------
drop table if exists `cjs`;
create table `cjs` (
`name` varchar(32) character set utf8mb4 collate utf8mb4_0900_ai_ci null default null,
`chinese` int null default null,
`math` int null default null,
`phy` int null default null
) engine = innodb character set = utf8mb4 collate = utf8mb4_0900_ai_ci row_format = dynamic;
-- ----------------------------
-- records of cjs
-- ----------------------------
insert into `cjs` values ('张三', 89, 90, 79);
insert into `cjs` values ('李四', 88, 79, 90);
set foreign_key_checks = 1;
2、效果图

| name | course |
|---|---|
| 张三 | 90 |
| 张三 | 89 |
| 张三 | 79 |
| 李四 | 79 |
| 李四 | 88 |
| 李四 | 90 |
3、业务代码
select *
from (
select name, math as course
from cjs
union all
select name, chinese as course
from cjs
union all
select name, phy as course
from cjs
) t
order by t.name;到此这篇关于mysql行列互换的实现示例的文章就介绍到这了,更多相关mysql行列互换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论