初学oracle,不论在面试还是在工作中,我们经常会遇到行转列或列转行的问题。在学习的过程中,学习和理解花费一下午,这是楼主依靠自己的总结和理解写出的学习笔记,如有问题,敬请指出。
/*列转行的两种实现方法*/
现有如下表
想要转换成如下效果
传统方法:
select sname as 姓名,'yuwen' as 科目,max(yuwen) as 分数
from stu_info2
group by sname
UNION ALL
select sname as 姓名,'shuxue' as 科目,max(yuwen) as 分数
from stu_info2
group by sname
UNION ALL
select sname as 姓名,'yingyu' as 科目,max(yuwen) as 分数
from stu_info2
group by sname
UNION ALL
select sname as 姓名,'zhengzhi' as 科目,max(yuwen) as 分数
from stu_info2
group by sname
使用unpivot:
select sname as 姓名,科目,成绩 from stu_info2
unpivot (成绩 for 科目 in (yuwen,shuxue,yingyu,zhengzhi))
order by sname;
之所以要在图中标出标号,是告诉大家大家应该关注的点,初学者往往看表就看蒙了,更无从谈理解,学习时将红框标出的内容对应在语句中的相应位置查看,理解起来就要轻松很多
...待更新