oracle数组行列转换
时间: 2025-03-05 18:20:19 浏览: 33
### Oracle 数据库中数组的行列转换方法
在 Oracle 数据库中处理数组形式的数据并进行行列转换主要依赖于特定的功能和函数组合来完成。对于行转列的操作,`PIVOT()` 函数提供了简洁而强大的支持[^4];而对于列转行,则可以利用 `UNPIVOT()` 函数实现更灵活的数据结构变换[^2]。
#### 使用 PIVOT 进行行到列的转换
当需要将多行记录汇总为单行显示时,可以通过 `PIVOT` 来操作:
```sql
SELECT *
FROM (
SELECT deptno, job, COUNT(*) AS cnt
FROM emp
GROUP BY deptno, job
) PIVOT(
SUM(cnt)
FOR job IN ('CLERK', 'SALESMAN', 'MANAGER')
);
```
这段 SQL 将员工职位分类计数的结果按照部门编号分组,并把不同的职位作为单独的列展示出来。
#### 应用 UNPIVOT 实现列向行的变化
如果目标是从宽表格式变为长表格式,即多个字段值变成单一字段下的不同行项,那么应该考虑采用 `UNPIVOT` 方式来进行调整:
```sql
WITH score_copy(stuname, 英语, 数学, 语文) AS (
VALUES('张三',89,76,90),
('李四',78,85,88)
)
SELECT stuname, coursename ,score
FROM score_copy t
UNPIVOT(score FOR coursename IN (英语,数学,语文));
```
此查询会把原始表格里每位学生的各科成绩拆分成独立条目呈现,在最终结果集中每门课程对应一行记录。
另外值得注意的是,在某些情况下可能还需要借助其他辅助工具如 `LISTAGG()` 来构建更加复杂的输出模式,特别是在涉及到字符串拼接或是定制化报告生成场景下非常有用[^3]。
阅读全文
相关推荐


