2016-07-06 240 views
1

如何在ORACLE SQL中的PIVOT函數中將NULL替換爲0? 這是我想要編寫查詢:ORACLE SQL:我如何用Pivot函數中的NULL替換NULL

SELECT * 
FROM 
(
SELECT DISTINCT 
    CUSTOMER_ID AS CUSTOMER_ID, 
    CASE 
     WHEN CATEGORY_CODE = '01' THEN 'CAT 01' 
     WHEN CATEGORY_CODE = '02' THEN 'CAT 02' 
     WHEN CATEGORY_CODE = '03' THEN 'CAT 03' 
     ELSE 'OTHER' END AS CATEGORY, 
    SUM(ORDERS) AS ORDERS 
FROM 
    TABLE_01 
GROUP BY 
    CUSTOMER_ID, 
    CASE 
     WHEN CATEGORY_CODE = '01' THEN 'CAT_01' 
     WHEN CATEGORY_CODE = '02' THEN 'CAT_02' 
     WHEN CATEGORY_CODE = '03' THEN 'CAT_03' 
     ELSE 'OTHER' END 
) 
PIVOT 
    (
    SUM(ORDERS) 
    FOR CATEGORY IN 
     (
     'CAT_01', 
     'CAT_02', 
     'CAT_03', 
     'OTHER' 
     ) 
    ) 
) 
; 

我想什麼是有一個表,當客戶沒有對特定類別的任何命令,它會返回0,而不是空。像這樣:

CUSTOMER_ID CAT_01 CAT_02 CAT_03 
00001    0  100  0 
00002   100  0  0 
00003    0  0  100 

請記住,這是有幾類和嵌套查詢的複雜查詢的一個非常簡化的部分。

回答

3

您必須在頂部更改select *部分查詢以單獨指定列,以便您可以將它們打包到nvl的調用中。如果你喜歡,你也可以使用​​3210。

select customer_id, 
     nvl(cat_01, 0) as cat_01, 
     nvl(cat_02, 0) as cat_02, 
     nvl(cat_03, 0) as cat_03, 
     nvl(other, 0) as other 
from (... 
+0

你知道如果我將SUMES添加到SUM函數,它會工作嗎?像這樣: PIVOT(SUM(COALESCE(ORDERS,0))... ... – user3644952

+0

它會起作用,並且將'ORDERS'包裝在'NVL(...,0)一樣的東西)。 – mathguy