玉祥平台客服-15087858732

标题: 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,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量。
  1. <span style="background-color: white;">create table demo(id int,name varchar(20),nums int);  ---- 创建表
  2. insert into demo values(1, '苹果', 1000);
  3. insert into demo values(2, '苹果', 2000);
  4. insert into demo values(3, '苹果', 4000);
  5. insert into demo values(4, '橘子', 5000);
  6. insert into demo values(5, '橘子', 3000);
  7. insert into demo values(6, '葡萄', 3500);
  8. insert into demo values(7, '芒果', 4200);
  9. insert into demo values(8, '芒果', 5500);</span>
复制代码



分组查询 (当然这是不符合查询一条数据的要求的)
  1. <span style="background-color: white;">select name, sum(nums) nums from demo group by name</span>
复制代码



行转列查询
  1. <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函数,等同于下列语句,只是代码比较长,容易理解

  1. <span style="background-color: white;">select * from (select sum(nums) 苹果 from demo where name='苹果'),(select sum(nums) 橘子 from demo where name='橘子'),
  2.        (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





欢迎光临 玉祥平台客服-15087858732 (http://bbs.delit.cn/) Powered by Discuz! X3.2