如何在Oracle中PIVOT结果?
问题:
您要在Oracle中PIVOT结果。
解
PIVOT子句是OracleDatabase11g的新增功能,它使您可以将行翻转为查询输出中的列,同时,还可以对数据运行聚合函数。
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
) ;热门推荐
1 小托班祝福语简短
10 对好友的祝福语简短
11 毕业祝福语再见朋友简短
12 喜得贵子蛋糕祝福语简短
13 周末祝福语简短有内涵
14 立春祝福语简短微信
15 女儿成年祝福语简短霸气
16 比赛宣传祝福语简短精辟
17 520祝福语最简短的
18 高考夸张祝福语大全简短