技术文摘
Oracle 实现列转行的 SQL 语句是怎样的
2025-01-15 01:01:14 小编
Oracle 实现列转行的 SQL 语句是怎样的
在数据库处理中,列转行是一种常见需求,Oracle 数据库提供了多种方法来实现这一操作,掌握这些方法能有效提升数据处理效率。
使用 DECODE 函数是实现列转行的基础方式之一。例如,有一张存储学生课程成绩的表 student_scores,包含 student_id(学生 ID)、course_name(课程名称)和 score(成绩)字段。若要将课程成绩按学生 ID 进行列转行展示,把不同课程成绩转换为列,可通过 DECODE 函数实现。代码大致如下:
SELECT student_id,
MAX(DECODE(course_name, '数学', score)) AS 数学成绩,
MAX(DECODE(course_name, '英语', score)) AS 英语成绩
FROM student_scores
GROUP BY student_id;
这段代码中,DECODE 函数对 course_name 进行判断,若为指定课程,则返回对应的 score,MAX 函数用于处理可能存在的多条记录情况,GROUP BY 按 student_id 分组。
PIVOT 操作符是 Oracle 11g 引入的强大功能,它为列转行提供了更简洁直观的方式。还是以上述成绩表为例,使用 PIVOT 操作符的代码如下:
SELECT *
FROM (
SELECT student_id, course_name, score
FROM student_scores
)
PIVOT (
MAX(score)
FOR course_name IN ('数学' AS 数学成绩, '英语' AS 英语成绩)
);
在这段代码里,内层查询获取基础数据,PIVOT 操作符将 course_name 作为转置的依据,MAX(score) 确定要展示的值,IN 子句指定了要转换的列及新列名。
还有 CASE WHEN 语句也能实现列转行。与 DECODE 函数类似,CASE WHEN 逻辑更为灵活。示例代码如下:
SELECT student_id,
MAX(CASE WHEN course_name = '数学' THEN score END) AS 数学成绩,
MAX(CASE WHEN course_name = '英语' THEN score END) AS 英语成绩
FROM student_scores
GROUP BY student_id;
通过 CASE WHEN 条件判断,根据课程名称返回相应成绩。
不同方法在不同场景各有优势。DECODE 函数语法简单,适用于简单条件判断;PIVOT 操作符简洁直观,尤其在数据量较大且规则明确时表现出色;CASE WHEN 语句逻辑灵活,可处理复杂条件。熟练掌握这些 Oracle 实现列转行的 SQL 语句,能在数据处理工作中更加得心应手。
- 面试官:Vue3 中 Reactive 的懒响应性指什么?
- Rust 语言入门之 Hello World 示例
- Python 分布式进程接口全解析:一篇文章就够了
- Python 概率编程库 pymc:从入门至精通的应用实践
- 127.0.0.1 与 localhost 的区别 此文为您揭晓
- markdown-it 深度剖析:文本格式化的绝佳新工具
- 深度剖析 C++ main 函数中的 argc 和 argv
- 单服务器高性能模式:PPC 及 TPC
- Python 性能监控必备:执行时间计算全攻略
- 2024 年:借助 Node.js 摆脱重复劳动,一键搞定 CLI 工具
- Spring 循环依赖解决策略深度剖析
- OpenCvSharp构建智能考勤系统,达成高效人脸录入与精准考勤识别
- JS 的 AI 时代已至,携手共进迎接它!
- Go 工具链着手收集与上报使用数据
- Python 中外观模式、桥接模式、组合模式与享元模式的实现