pivot是一个在Oracle中输出EXCEL报表时非常有用的函数,它可以将字段值转成列名,并且同时做一些聚合操作。
语法格式:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值,可多个))
实例:
有一个产品销售表如下:1
2
3
4
5
6
7
8CREATE TABLE PRODUCT_SELL
(
ID NUMBER(10) not null,
PRODUCT_NAME VARCHAR2(50),
SELL_TIME DATE,
SELL_COUNT NUMBER(10),
CONSTRAINT PK_PRODUCT primary key (ID)
);
插入测试数据:
如果我们要根据2018年各产品销售量给出各个月销售数量表,sql可以写成这样:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25SELECT * --这里只能用 “*” 号,或者没有进行转换的字段,比如这里的PRODUCT_NAME,而不能含有SELL_COUNT、MON这两个字段
FROM
(
SELECT A.PRODUCT_NAME, TO_CHAR(A.SELL_TIME,'mm') AS MON, A.SELL_COUNT
FROM PRODUCT A
WHERE TO_CHAR(A.SELL_TIME,'yyyy') = '2018'
)
PIVOT
(
SUM(SELL_COUNT) FOR MON IN
(
'01' M1, --这里也可以写成 '01' AS M1
'02' M2,
'03' M3,
'04' M4,
'05' M5,
'06' M6,
'07' M7,
'08' M8,
'09' M9,
'10' M10,
'11' M11,
'12' M12
)
);
sql执行的结果如下: