1、行、列转换

--行转列 
create table 成绩(姓名 varchar(10),科目 varchar(10),分数 int) 
insert into 成绩 values('张三','语文',74) 
insert into 成绩 values('张三','数学',83) 
insert into 成绩 values('张三','物理',93) 
insert into 成绩 values('李四','语文',77) 
insert into 成绩 values('李四','数学',84) 
insert into 成绩 values('李四','物理',94)
insert into 成绩 values('王五','语文',81) 
insert into 成绩 values('王五','数学',86) 
insert into 成绩 values('王五','物理',91)
--方法1
select
姓名,
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 成绩 group by 姓名
--方法2(sql20005)
select*from 成绩 pivot(max(分数) for 科目 in (语文,数学,物理)) a

--列转行 
create table 成绩(姓名 varchar(10),语文 int,数学 int,物理 int) 
insert into 成绩 values('张三',74,83,93)  
insert into 成绩 values('李四',77,84,94)  
insert into 成绩 values('王五',81,86,91)  
--方法1
select 姓名,'语文' as 科目,语文 as 分数 from 成绩
union
select 姓名,'数学' as 科目,数学 as 分数 from 成绩
union
select 姓名,'物理' as 科目,物理 as 分数 from 成绩
--方法2
select 姓名,科目,分数 from 成绩 unpivot(分数 for 科目 in(语文,数学,物理)) t
View Code

相关文章: