行列互转


一:列转行

如:SNAME  JAVA  ORACLE    PHP --以列的形式表示成绩


          大张     89        90             98

转换成行的形式表示:SNAME COURSE SCORE

                                     大张     JAVA           89

                                     大张     ORACLE     90

                                     大张      PHP            98

转换思想:将不同的列转换时变成不同的行显示

先查出每一行的数据,然后使用UNION进行合并,在进行select查询时产生临时表,重构了新表结构

UNION :将两张表结构相同的表合成一张,并自动删除重复记录

执行前:



SELECT sname, 'java' course,JAVA  ---//查询出课程java的所有行并以course为别名以及java的成绩
FROM temp_student_score   
UNION
SELECT sname, 'oracle' course,oracle ---//查询出课程oracle的所有行并以course为别名以及oracle的成绩
FROM temp_student_score
UNION
SELECT sname, 'php' course,php ---//查询出课程php的所有行并以course为别名以及php的成绩
FROM temp_student_score


执行后结果:



二:行转列

首先数据是成行显示


就是将一中的结果图转成执行前的图

思想:将同一个姓名的多条行数据转换成一行多列的数据

因此想到了group by 即根据查询姓名进行分组,每一行是不同姓名的信息。

 

decode(数据/表达式,判断结果,结果1,结果2):如果数据/表达式与判断结果相等,则取值为结果1,否则

 

取值结果2

 

SELECT SNAME,
SUM(DECODE(COURSE, 'JAVA', s.SCORE, 0)) JAVA,
SUM(DECODE(COURSE, 'ORACLE', s.SCORE, 0)) ORACLE,
SUM(DECODE(COURSE, 'PHP', s.SCORE, 0)) PHP
FROM student s
GROUP BY SNAME;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值