2016-07-06 205 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