1 列转行
测试脚本
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)go
转化脚本
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 姓名
附加求总分和平均分
select 姓名 , max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 when '数学' then 分数 else 0 end) 数学 ,max(case 课程 when '物理' then 分数 else 0 end) 物理 ,sum(分数) 总分,cast(avg(分数*1.0)as decimal(18,2)) 平均分from tb group by 姓名
2 列传行
测试脚本
create table tbs(姓名 varchar(10),语文 int,数学 int,物理 int)insert into tbs values('张三',74,83,93)insert into tbs values('李四',74,84,94)go
转化脚本
select 姓名,课程 ='语文',分数=语文 from tbs union select 姓名,课程='数学',分数=数学 from tbs union select 姓名,课程='物理',分数=物理 from tbs