度量快速开发平台-专业、快速的软件定制快开平台
标题: Oracle列转行函数(pivot )使用宝典 [打印本页]
作者: 万望 时间: 2020-6-18 10:33
标题: Oracle列转行函数(pivot )使用宝典
本帖最后由 万望 于 2016-8-18 10:38 编辑
在Oracle 11g中,Oracle 又增加了查询:pivot(列转行)函数
函数详解参考ORAClE官方文档:http://www.oracle.com/technetwor ... vot-101924-zhs.html
pivot 列转行测试数据 (id,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量。
- <span style="background-color: white;">create table demo(id int,name varchar(20),nums int); ---- 创建表
- insert into demo values(1, '苹果', 1000);
- insert into demo values(2, '苹果', 2000);
- insert into demo values(3, '苹果', 4000);
- insert into demo values(4, '橘子', 5000);
- insert into demo values(5, '橘子', 3000);
- insert into demo values(6, '葡萄', 3500);
- insert into demo values(7, '芒果', 4200);
- insert into demo values(8, '芒果', 5500);</span>
复制代码
分组查询 (当然这是不符合查询一条数据的要求的)
- <span style="background-color: white;">select name, sum(nums) nums from demo group by name</span>
复制代码
行转列查询
- <span style="background-color: white;">select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));</span>
复制代码
注意: pivot(聚合函数 for 列名 in(类型)) ,其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers
当然也可以不使用pivot函数,等同于下列语句,只是代码比较长,容易理解
- <span style="background-color: white;">select * from (select sum(nums) 苹果 from demo where name='苹果'),(select sum(nums) 橘子 from demo where name='橘子'),
- (select sum(nums) 葡萄 from demo where name='葡萄'),(select sum(nums) 芒果 from demo where name='芒果');</span>
复制代码
作者: 万望 时间: 2020-6-18 10:39
时刻保持学习的姿态,补充大脑
作者: 万望 时间: 2020-6-18 22:12
作者: 万望 时间: 2020-6-18 22:13
作者: 陈晓龙 时间: 2020-6-18 22:22
这个文章我今天也看过
作者: 陈晓龙 时间: 2020-6-18 22:23
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) |
Powered by Discuz! X3.2 |