SQL的行列转换
【一】行转列
1,查询原始的数据
/***这次练习的主题,行转列,列转行***/
select * from Scores
2,得到姓名,通过group by
select Student as '姓名'
from Scores
group by Student
order by Student
3,再加上max, case……when
select Student as '姓名',
max(case Subject when '语文' then Score else 0 end) as '语文' ,--如果这个行是“语文”,就选此行作为列
max(case Subject when '英语' then Score else 0 end ) as '英语'
from Scores
group by Student
order by Student
查看其它资料时,看到另外一种方法,用pivot
--group by, avg/max, pivot。这里用max和avg,结果都一样,有什么区别吗?有点不明白
--参考网上的资料,用法如下
/*
pivot(
聚合函数(要转成列值的列名)
for 要转换的列
in(目标列名)
)
*/
select Student as '姓名',
avg(语文) as '语文',
avg(英语) as '英语'
from Scores
pivot(
avg(Score) for Subject
in (语文,英语)
)as NewScores
group by Student
order by Student asc