oracle之行转列

对于Oracle的行转列功能一直云里雾里,马马虎虎,对行转列的使用场景和使用方法都不够深刻,最近有空理解一下。
Oracle 11g后有专门的函数pivot,对于特定的场景可以直接套用。
需求:求各份job不同员工工资是多少?

job sal deptno
A 1000 10
A 1000 20
A 2000 20
B 3000 20
B 4000 30
C 5000 20
C 6000 30
select* from
(select ②job,sal,deptno)
pivot (sum(sal) as ③s
for deptno in (10 as d10,20 as d20,30 as d30))
order by 1;

执行结果如下:

job d10_s d20_s d30_s
A 1000 3000
B 3000 4000
C 5000 6000

注释:
① 该处返回的是行转列之后的字段,如果查询原有字段会报错;
② 除了要汇总的列sal和要转换的列deptno,其他字段默认group by;
③ as后加的s与d10、d20、d30默认下划线连接,也可不做另外连接;
④ pivot子句实际执行的还是case when语句。

你可能感兴趣的:(oracle,数据库)