sql server 行列互转

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

 

posted @ 2015-11-13 14:23  扫地僧2015  阅读(247)  评论(0编辑  收藏  举报