在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