SQL的行列转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于SQL的行列转换的主要内容,如果未能解决你的问题,请参考以下文章