ORACLE 行专列 PIVOT 函数的应用

首先,做准备工作
建表:
【ORACLE 行专列 PIVOT 函数的应用】-- Create tablecreate table DEMO(n_idenNUMBER,c_order_code NVARCHAR2(50),c_order_name NVARCHAR2(50),c_friutNVARCHAR2(50),c_amountNUMBER(20,4),d_buildDATE,c_buyerNVARCHAR2(50),c_sellerNVARCHAR2(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()forin ('苹果','橘子','香蕉') )
翻译:pivot :轴,中心
sum() :单聚合函数
for:对于,关于
: 转换为行的字段
in('苹果','橘子','香蕉') : 以三种水果为分组
上述两种的查询结果为:
还有一种行专列的形式,是用 函数
,, (()) from demo group by ,;
第一单 橘子,苹果,香蕉
通常是配合替换函数使用:
因为作者水平有限,难免有疏漏之处.望读者不吝批评指正!