Oracle表格数据格式转换求助:将现有表数据转为指定格式
Oracle 数据表宽转长解决方案
针对你需要将多科目列的宽表转换为科目-分数行记录的需求,可通过Oracle的UNPIVOT语法快速实现,具体方案如下:
假设原表定义
假设你的原表名为STUDENT_SCORES,结构为:
STUDENT_NAME:学生姓名(字符串类型)CHINESE:语文成绩(数值类型)MATH:数学成绩(数值类型)ENGLISH:英语成绩(数值类型)
转换SQL语句
SELECT student_name, subject, score FROM student_scores UNPIVOT ( score FOR subject IN ( CHINESE AS '语文', MATH AS '数学', ENGLISH AS '英语' ) ) ORDER BY student_name;
关键说明
UNPIVOT负责将原表中的多列科目数据拆解为多行记录score是转换后存储分数的列名,subject是存储科目名称的列名- 括号内的
列名 AS '科目别名'用于将原表列名映射为目标格式中的科目名称
若你的原表列名、表名或科目数量不同,只需调整SQL中对应的部分即可适配。
内容的提问来源于stack exchange,提问作者codeplex
相关产品推荐
相关产品推荐

