sql多字段行转列
创建数据表:
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values(‘张三’,‘语文’,74)
insert into tb values(‘张三’,‘数学’,83)
insert into tb values(‘张三’,‘物理’,93)
insert into tb values(‘李四’,‘语文’,74)
insert into tb values(‘李四’,‘数学’,84)
insert into tb values(‘李四’,‘物理’,94)
查询:select * from tb
方法一:
select 姓名,
sum(case 课程 when ‘语文’ then 分数 else 0 end)语文,
sum(case 课程 when '数学’then 分数 else 0 end)数学,
sum(case 课程 when '物理’then 分数 else 0 end)物理
from tb
group by 姓名
方法二:
select 姓名,
max(case 课程 when ‘语文’ then 分数 else 0 end)语文,
max(case 课程 when '数学’then 分数 else 0 end)数学,
max(case 课程 when '物理’then 分数 else 0 end)物理
from tb
group by 姓名
方法三:
– 使用pivot
select * from tb pivot(max(分数) for 课程 in (语文,数学,物理))a
方法四:
select * from
(select 姓名,课程,分数 from tb) test pivot(sum(分数) for 课程 in(语文,数学,物理)) pvt
以上四种查询结果均为: