2 / 41
1 Oracle 11g 中的 pivot 和 unpivot 查询
转换查询包括将行转换成列(pivot)和将列转换成行(unpivot),从而产生交叉表格式的结果。
转换是一项通用的技术,尤其对于报表来讲,正是由于该项技术使得多年来针对 Oracle 的不同
版本,可以使用 SQL 语句产生转换查询的结果集。从 Oracle 11g 开始,包含了显式的转换查询
支持,即 PIVOT 和 UNPIVOT 关键字。这是对 SELECT 语句的扩展。
1.1 pivot
这里我们从 pivot 操作开始。大多数的开发者首先要熟悉转换数据:即多行被聚合,然后转换成
列,每一列表示聚合数据的不同范围。语法:
SELECT ...
FROM ...
PIVOT [XML]
( pivot_clause
pivot_for_clause
pivot_in_clause )
WHERE ...
除了新的 pivot 关键字外,可以看到 3 个新的 pivot 子句,描述如下:
pivot_clause:定义被聚合的列(pivot 是一种聚合操作)
pivot_for_clause:定义被分组和转换的列。
pivot_in_clause:定义 pivot_for_clause 子句中列的过滤器(例如使用值的范围来限制结果)。
pivot_in_clause 中每个值的聚合都将被转换成单独的列
1.1.1 一个简单的例子
这个例子是对 pivot 语法的简单的演示,使用 scott.emp 表,这里将通过 department 和 job 来汇总
salaries,然后转换对每个部门的汇总到它们各自的列上,在转换之前,先看一下基础数据
SELECT job, deptno, SUM(sal) AS sum_sal
FROM emp
GROUP BY job, deptno
评论0
最新资源