在Oracle中,PIVOT函数用于将行数据转换为列数据
以下是一个使用PIVOT函数处理空值的示例:
假设我们有一个名为SALES_DATA的表,其中包含以下数据:
PRODUCT | MONTH | SALES
--------|-------|-------
A | 1 | 100
A | 2 | 200
B | 1 | 150
B | 3 | 300
我们想要将这些数据转换为以下格式:
PRODUCT | MONTH_1 | MONTH_2 | MONTH_3
--------|---------|---------|---------
A | 100 | 200 | NULL
B | 150 | NULL | 300
为了实现这个目标,我们可以使用PIVOT函数,并使用NVL函数处理空值。以下是SQL查询:
SELECT *
FROM (
SELECT PRODUCT, MONTH, SALES
FROM SALES_DATA
)
PIVOT (
SUM(SALES)
FOR MONTH IN (1 AS MONTH_1, 2 AS MONTH_2, 3 AS MONTH_3)
)
ORDER BY PRODUCT;
这将返回预期的结果。如果您希望将空值替换为特定值(例如0),可以使用NVL函数。以下是修改后的查询:
SELECT PRODUCT,
NVL(MONTH_1, 0) AS MONTH_1,
NVL(MONTH_2, 0) AS MONTH_2,
NVL(MONTH_3, 0) AS MONTH_3
FROM (
SELECT PRODUCT, MONTH, SALES
FROM SALES_DATA
)
PIVOT (
SUM(SALES)
FOR MONTH IN (1 AS MONTH_1, 2 AS MONTH_2, 3 AS MONTH_3)
)
ORDER BY PRODUCT;
这将返回以下结果:
PRODUCT | MONTH_1 | MONTH_2 | MONTH_3
--------|---------|---------|---------
A | 100 | 200 | 0
B | 150 | 0 | 300