【一】行转列
1,查询原始的数据
/***这次练习的主题,行转列,列转行***/select * from Scores
2,得到姓名,通过group by
select Student as ‘姓名‘from Scoresgroup by Studentorder 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 Scoresgroup by Studentorder by Student
查看其它资料时,看到另外一种方法,用pivot
--group by, avg/max, pivot。这里用max和avg,结果都一样,有什么区别吗?有点不明白
--参考网上的资料,用法如下
/*
pivot(
聚合函数(要转成列值的列名)
for 要转换的列
in(目标列名)
)
*/
select Student as ‘姓名‘,
avg(语文) as ‘语文‘,avg(英语) as ‘英语‘from Scorespivot( avg(Score) for Subject in (语文,英语) )as NewScoresgroup by Studentorder by Student asc
时间: 2024-10-17 20:11:04