oracle

Oracle pivot函数处理空值的方法

小樊
103
2024-09-02 15:18:17
栏目: 云计算

在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

0
看了该问题的人还看了