for oracle中pivot_如何在Oracle中PIVOT结果?

问题:

您要在Oracle中PIVOT结果。

PIVOT子句是Oracle Database 11g的新增功能,它使您可以将行翻转为查询输出中的列,同时,还可以对数据运行聚合函数。

PIVOT对于查看大量数据的总体趋势特别有用。

我们将使用销售数据来演示用法。

示例SELECT * FROM sales;

输出结果12008   12  1998-02-28  6   37  552 1898.88

12008   18  1998-02-28  6   37  463 1592.72

12008   20  1998-02-28  6   37  2430    8359.2

12008   25  1998-03-31  6   36  3387    12091.59

12008   26  1998-01-31  6   37  2381    8190.64

PIVOT的语法。

示例SELECT *

FROM (

inner_query

)

PIVOT (

aggregate_function FOR pivot_column IN (list_of_values)

)

ORDER BY…;

我们将使用PIVOT来查看几个月内产品类型的销售趋势。下面是相同的示例。

示例SELECT *

FROM

(SELECT SUBSTR(time_id,06,02) AS month_val,

prod_id,

amount_sold

FROM sales

WHERE SUBSTR(time_id,01,04)           = 1998

) PIVOT ( SUM(amount_sold) FOR prod_id IN (12008 , 12010 , 12011 ) )

ORDER BY month_val;

输出结果01  145714.96   1039519.04  1719280.2

02  149309.76   1067082.24  1758706.44

03  1072859.97  8045916.84  13191209.28

04  154280.56   1106052.23  1826847.36

05  155322.88   1119728.52  1848467.64

06  1166464.25  8477308.28  13882822.54

07  157737.76   1145882.33  1891410.4

08  167073.92   1214760.69  2010620.5

09  1274290.22  8932017.99  15038327.33

10  160988.56   1180869.5   1956298.5

11  159736.4    1189188     1964635.2

12  1227572.64  8795186.2   14774142.24

我们还可以将多个表添加到PIVOT。这是一个例子。

示例SELECT *

FROM

(SELECT SUBSTR(time_id,06,02) AS month_val,

prod_id,

amount_sold

FROM sales

WHERE SUBSTR(time_id,01,04) = 1998

) PIVOT ( SUM(amount_sold) FOR (month_val, prod_id) IN ((01,12008), (02, 12010) ,(03, 12011 ) ));

此外,我们在PIVOT查询中还可以具有多个聚合函数。

示例SELECT *

FROM

(SELECT SUBSTR(time_id,06,02) AS month_val,

prod_id,

amount_sold

FROM sales

WHERE SUBSTR(time_id,01,04)= 1998

) PIVOT ( SUM(amount_sold),AVG(amount_sold) AS avg_amount FOR (month_val, prod_id) IN ((01,12008), (02, 12010) ,(03, 12011 ) ));

上述问题陈述的表结构:

示例CREATE TABLE "SALES"

(    "PROD_ID" NUMBER NOT NULL ENABLE,

"CUST_ID" NUMBER NOT NULL ENABLE,

"TIME_ID" VARCHAR2(20) NOT NULL ENABLE,

"CHANNEL_ID" NUMBER NOT NULL ENABLE,

"PROMO_ID" NUMBER NOT NULL ENABLE,

"QUANTITY_SOLD" NUMBER(10,2) NOT NULL ENABLE,

"AMOUNT_SOLD" NUMBER(10,2) NOT NULL ENABLE

) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值