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