sql的行列互换
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
用sql语句得到以下结构:
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
--创建数据库
create table tb
(
姓名 varchar(10) ,
课程 varchar(10) ,
分数 int
)
--添加数据
insert into tb values('张三' , '语文' , 70);
insert into tb values('张三' , '数学' , 80);
insert into tb values('张三' , '物理' , 90);
insert into tb values('李四' , '语文' , 71);
insert into tb values('李四' , '数学' , 81);
insert into tb values('李四' , '物理' , 92);
--事务提交
commit;
(
姓名 varchar(10) ,
课程 varchar(10) ,
分数 int
)
--添加数据
insert into tb values('张三' , '语文' , 70);
insert into tb values('张三' , '数学' , 80);
insert into tb values('张三' , '物理' , 90);
insert into tb values('李四' , '语文' , 71);
insert into tb values('李四' , '数学' , 81);
insert into tb values('李四' , '物理' , 92);
--事务提交
commit;
--select * from tb
--查询
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) as 语文,
max(case 课程 when '数学' then 分数 else 0 end) as 数学,
max(case 课程 when '物理' then 分数 else 0 end) as 物理
from tb group by 姓名 order by 姓名 desc
我就是一个菜鸟!

浙公网安备 33010602011771号