对于学生成绩单表,需要按照年度展现每个学生的成绩趋势
需求:
展示趋势图1,姓名,学科,2022年成绩,2023年成绩,2024年成绩
展示趋势图2,姓名,2022年平均成绩,2023年平均成绩,2024年平均成绩
当然可以查到数据内存按照姓名学科拼接,但是其实Oracle提供了pivot可以直接实现查询出来就已经列转行。
【格式】:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))
【说明】:实现将指定字段的字段值转换为列的效果。
按照名称,科目显示指定年度的得分,此时转换的列明是年度,值是df,等于name,class,nd分组,展示df,所以仅有一个值,用sum,avg,都是只展示一个值
展示趋势图2,姓名,2022年平均成绩,2023年平均成绩,2024年平均成绩,这时候汇总的字段是name,df取平均值,nd列转行,使用select anme ,nd,df from temp 查询结果如下,在这个sql下直接用pivot报错,改写为select * 没有问题,应该是pivot不支持上面的方式。