首页 > 学院 > 开发设计 > 正文

横竖表相互转换SQL

2019-11-08 20:36:38
字体:
来源:转载
供稿:网友

Oracle数据库为例,测试在数据处理中经常遇到数据库中横表和竖表的相互转换,采用学生各科成绩分数为测试数据

横表转换竖表:

CREATE table score(   username varchar(10) ,   chinese  int ,   math     int ,   physics  int); INSERT into score(username , chinese , math , physics) values('Kay',74,83,93);INSERT into score(username , chinese , math , physics) values('Jim',75,84,94);INSERT into score(username , chinese , math , physics) values('Lily',86,49,91); COMMIT; SELECT * FROM score;

横表转换成竖表关键在于如何把一条记录转换成多条记录,三个分数字段对应三条记录,可以采用一个只有三条记录中间表和score表做笛卡尔积把一条记录copy成三条记录

WITH T AS( SELECT 'chinese' course FROM dual  UNION ALL  SELECT 'math'    course FROM dual  UNION ALL   SELECT 'physics' course FROM dual) SELECT username,course,decode(course,'chinese',chinese,'math',math,'physics',physics)   FROM score ,T  ORDER BY username ,course;竖表转换横表:

SELECT * FROM course;

竖表转换横表关键在于如何把多条记录合并成一条记录,按照username进行group by 使用聚合函数把多条合并成一条且按不同的类别值合并到不同的字段

SELECT username,        MAX(decode(course,'chinese',score)) chinese,       MAX(decode(course,'math',score)) math,       MAX(decode(course,'physics',score)) physics  FROM courseGROUP BY usernameORDER BY username


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表