将表的行列倒置显示(透视变换)
1)、创建数据表并添加数据
create table Score ( 学号 nvarchar(10) ,课程 nvarchar(10) ,成绩 nvarchar(10) ); insert into Score(学号,课程,成绩)values('0001','语文',87),('0001','数学',79),('0001','英语',95) ,('0002','语文',69),('0002','数学',84);
2)、先查询观察整张表的结构
select * from Score;
3)、先显示要展示的基本的结构
select 学号,'语文','数学','英语' from Score;
4)、使用case语句,如果课程=语文 则直接显示语文成绩,否则显示0,其他科目同
select 学号 ,case when 课程='语文' then 成绩 else 0 end as'语文' ,case when 课程='数学' then 成绩 else 0 end as'数学' ,case when 课程='英语' then 成绩 else 0 end as'英语' from Score;
5)、从5行变2行,使用分组聚合(按学号分组,各科分组聚合)
select 学号 ,sum(case when 课程='语文' then 成绩 else 0 end) as'语文' ,sum(case when 课程='数学' then 成绩 else 0 end) as'数学' ,sum(case when 课程='英语' then 成绩 else 0 end) as'英语' from Score group by 学号;