Oracle pivot & unpivot
admin
2023-04-27 08:03:37
0次

pivot & unpivot 11g新特性

1     pivot

以列-值对的形式出现,典型的行转列报表函数。

create table test_demo(id int,name varchar(20),nums int);  ---- 创建表
insert into test_demo values(1, '苹果', 1000);
insert into test_demo values(2, '苹果', 2000);
insert into test_demo values(3, '苹果', 4000);
insert into test_demo values(4, '橘子', 5000);
insert into test_demo values(5, '橘子', 3000);
insert into test_demo values(6, '葡萄', 3500);
insert into test_demo values(7, '芒果', 4200);
insert into test_demo values(8, '芒果', 5500);
commit;
 
select name, sum(nums)
  from test_demo
 group by name;
 
select *
  from (select name, nums fromtest_demo)
pivot(sum(nums)
   for name in('苹果', '橘子', '葡萄', '芒果'));
 
SQL> select *
  2    from (select name, nums from test_demo)
  3  pivot(sum(nums)
  4     for name in('苹果' as "苹果", '橘子', '葡萄', '芒果'));  --别名使用
        苹果       '橘子'       '葡萄'       '芒果'
---------- ---------- ---------- ----------
      7000       8000       3500       9700

 

这里再说语法:

pivot聚合函数 for 列名 in 类型 ,其中 in 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers

2     unpivot

典型的列转行报表函数

create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int,Q4 int);
这里Q1 int, Q2int, Q3 int, Q4 int表示四季度。
insert into Fruit values(1,'苹果',1000,2000,3300,5000);
insert into Fruit values(2,'橘子',3000,3000,3200,1500);
insert into Fruit values(3,'香蕉',2500,3500,2200,2500);
insert into Fruit values(4,'葡萄',1500,2500,1200,3500);
commit;
select * from Fruit;
 
select id , name, quarter, sell from Fruit unpivot (sell for quarterin (q1, q2, q3, q4));

 

注意:unpivot没有聚合函数,quarter、sell字段也是临时的变量。

这里sell是统计值,quarter表示季度及类型。

执行结果:

SQL> select id , name, quarter, sell from Fruit unpivot (sell forquarter in (q1, q2, q3, q4));
                                    ID NAME                QUARTER                                    SELL
--------------------------------------- -------------------- ----------------------------------------------
                                     1 苹果                 Q1                                         1000
                                     1 苹果                 Q2                                         2000
                                     1 苹果                 Q3                                         3300
                                     1 苹果                 Q4                                         5000
                                     2 橘子                 Q1                                         3000
                                     2 橘子                 Q2                                         3000
                                      2 橘子                 Q3                                         3200
                                     2 橘子                 Q4                                         1500
                                     3 香蕉                 Q1                                         2500
                                     3 香蕉                 Q2                                         3500
                                     3 香蕉                 Q3                                         2200
                                     3 香蕉                 Q4                                         2500
                                     4 葡萄                 Q1                                         1500
                                     4 葡萄                 Q2                                         2500
                                     4 葡萄                 Q3                                         1200
                                     4 葡萄                 Q4                                         3500


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...