自学内容网 自学内容网

oracle之行转列

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

jobsaldeptno
A100010
A100020
A200020
B300020
B400030
C500020
C600030
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;

执行结果如下:

jobd10_sd20_sd30_s
A10003000
B30004000
C50006000

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


原文地址:https://blog.csdn.net/qq_39779025/article/details/145270350

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!