首页 >> 大全

ORACLE 行专列 PIVOT 函数的应用

2023-11-19 大全 26 作者:考证青年

首先,做准备工作

建表:

-- Create table
create table DEMO
(n_iden       NUMBER,c_order_code NVARCHAR2(50),c_order_name NVARCHAR2(50),c_friut      NVARCHAR2(50),c_amount     NUMBER(20,4),d_build      DATE,c_buyer      NVARCHAR2(50),c_seller     NVARCHAR2(50)
)
tablespace MYORCL1pctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);
-- Add comments to the columns 
comment on column DEMO.n_idenis 'ID';
comment on column DEMO.c_order_codeis '订单';
comment on column DEMO.c_order_nameis '订单名称';
comment on column DEMO.c_friutis '水果类型';
comment on column DEMO.c_amountis '水果数量';
comment on column DEMO.d_buildis '创建日期';
comment on column DEMO.c_buyeris '订货人';
comment on column DEMO.c_selleris '买货人';

插入数据:

insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
values (1, 'order_num1', '第一单', '苹果', 1.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
values (2, 'order_num1', '第一单', '橘子', 2.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
values (3, 'order_num1', '第一单', '香蕉', 3.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
values (4, 'order_num2', '第二单', '苹果', 4.0000, to_date('10-01-2017', 'dd-mm-yyyy'), null, null);insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
values (5, 'order_num2', '第二单', '橘子', 5.0000, to_date('10-01-2017', 'dd-mm-yyyy'), null, null);

如果我们要实现以订单名称和订单代码为一个单位的数据时

苹果 橘子 香蕉

第一单 1 2 3

第二单 4 5 0

普通的实现方式比较复杂,并且当苹果种类较多的时候会变得极其不适用

普通方法的代码如下

,,sum((,'苹果',,0)) 苹果, sum((,'橘子',,0)) 橘子, sum((,'香蕉',,0)) 香蕉 from DEMO group by ,

用 PIVOT 函数如下

* from (

( ,,, from demo) pivot( sum()for in ('苹果','橘子','香蕉') )

翻译:pivot :轴,中心

sum() :单聚合函数

for:对于,关于

: 转换为行的字段

in('苹果','橘子','香蕉') : 以三种水果为分组

上述两种的查询结果为:

还有一种行专列的形式,是用 函数

,, (()) from demo group by ,;

第一单 橘子,苹果,香蕉

通常是配合替换函数使用:

因为作者水平有限,难免有疏漏之处.望读者不吝批评指正!

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了