SQL 行列转置

行列转置

首先我们来看一下,test_score表的结构和数据。
SQL 行列转置_第1张图片
假如我要把test_score表按照如下格式返回数据,这个SQL怎么写?
stu_name 科目1 科目2 科目3
学生1 分数 分数 分数
学生2 分数 分数 分数
学生3 分数 分数 分数

思路大致如下
**第一步:**如何构造每个科目的新字段,这个字段只显示这一科的分数?
SQL 行列转置_第2张图片
**第二步:**使用聚合函数max()过滤掉上述decode表达式生成的空值,按人进行分组
SQL 行列转置_第3张图片
SQL 行列转置_第4张图片
如果按转置后的数据创建一张新表,如何把新表还原回原有的格式?
思路大致如下:将表的数据以列为单元进行拆分,注意只保留该列非空的数值,将一个科目拆成原来的科目和分数两列
SQL 行列转置_第5张图片
接下来,使用union对分别构造的几个结果集进行叠加
SQL 行列转置_第6张图片
SQL 行列转置_第7张图片

你可能感兴趣的:(SQL 行列转置)