技术文摘
Oracle 纵表转横表的方法
Oracle 纵表转横表的方法
在 Oracle 数据库处理中,纵表转横表是一个常见且重要的需求。通过合理的方法实现纵表到横表的转换,能够让数据呈现更加直观,方便数据分析和处理。以下为您详细介绍几种常见的方法。
方法一:使用 PIVOT 函数 PIVOT 函数是 Oracle 11g 引入的新特性,它可以将行数据转换为列数据。例如,有一张存储学生成绩的纵表,包含学生 ID、课程名称、成绩三个字段。要将不同课程的成绩显示在同一行,就可以使用 PIVOT 函数。
SELECT *
FROM (SELECT student_id, course_name, score
FROM student_score)
PIVOT (MAX(score) FOR course_name IN ('Math' AS math_score, 'English' AS english_score, 'Science' AS science_score));
在这个查询中,首先在子查询中选择需要的数据,然后使用 PIVOT 函数将课程名称作为列,成绩作为对应列的值进行转换。
方法二:DECODE 函数 DECODE 函数也可以实现纵表转横表。对于上述学生成绩表,使用 DECODE 函数的查询如下:
SELECT student_id,
MAX(DECODE(course_name, 'Math', score)) AS math_score,
MAX(DECODE(course_name, 'English', score)) AS english_score,
MAX(DECODE(course_name, 'Science', score)) AS science_score
FROM student_score
GROUP BY student_id;
DECODE 函数通过判断课程名称,将对应的成绩转换到相应的列中,最后通过 GROUP BY 子句按照学生 ID 进行分组。
方法三:CASE 语句 CASE 语句同样能达成纵表转横表的目的。其原理与 DECODE 函数类似。示例代码如下:
SELECT student_id,
MAX(CASE WHEN course_name = 'Math' THEN score END) AS math_score,
MAX(CASE WHEN course_name = 'English' THEN score END) AS english_score,
MAX(CASE WHEN course_name = 'Science' THEN score END) AS science_score
FROM student_score
GROUP BY student_id;
通过 CASE 语句对课程名称进行条件判断,将成绩分配到对应的列。
不同的方法适用于不同的场景。PIVOT 函数语法简洁,对于较新的 Oracle 版本是很好的选择;DECODE 函数和 CASE 语句兼容性强,在旧版本中也能使用。在实际应用中,需要根据数据库版本、数据量以及性能要求等因素,选择最合适的方法来实现 Oracle 纵表到横表的转换。
TAGS: 数据库操作 数据转换 Oracle技术 Oracle纵表转横表
- Spring 官方 RSocket Broker 0.3.0 发布 助力快速构建 RSocket 架构
- Kafka 中 Consumer 的 Rebalance 机制源码解析探讨
- MemoryCache 原生插值方式浅析
- Spring MVC 中 Request 和 Response 的处理策略
- 商汤港股上市 告别至暗时刻
- 阿里 UC 徐慧书:音视频秒播技术的优化探索
- CSS3 实战汇总:提升工作效率(附源码)
- Vue3 中值得深究的知识点有哪些?
- Java11 中测试开发同学需知的重要变化
- Kube-Scheduler 插件的自定义方法
- Spring Boot 2.x 中默认日志管理及 Logback 配置的详细解析
- LeetCode 中的四数之和
- 快速掌握“小字端”与“大字端”在 Go 语言中的运用
- 95%的程序员用不到的“算法”,有必要死磕吗?
- 几个小操作,让 Transformer 模型推理速度提升 3.5 倍