SQL 行列转置

行列转置

首先我们来看一下,test_score表的结构和数据。
在这里插入图片描述
假如我要把test_score表按照如下格式返回数据,这个SQL怎么写?
stu_name 科目1 科目2 科目3
学生1 分数 分数 分数
学生2 分数 分数 分数
学生3 分数 分数 分数

思路大致如下
**第一步:**如何构造每个科目的新字段,这个字段只显示这一科的分数?

**第二步:**使用聚合函数max()过滤掉上述decode表达式生成的空值,按人进行分组


如果按转置后的数据创建一张新表,如何把新表还原回原有的格式?
思路大致如下:将表的数据以列为单元进行拆分,注意只保留该列非空的数值,将一个科目拆成原来的科目和分数两列

接下来,使用union对分别构造的几个结果集进行叠加

猜你喜欢

转载自blog.csdn.net/Marko_Liu/article/details/89399369