阅读量:0
在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