5

ORACLE SQLのPIVOT関数でNULLを0に置き換えるにはどうすればよいですか? これは私が書こうとしているクエリです:

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'
        )
    )
)
;

私が望むのは、顧客が特定のカテゴリで注文をしていない場合、NULL ではなく 0 を返すテーブルを用意することです。このような:

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

これは、複数のカテゴリとネストされたクエリを含む複雑なクエリの非常に単純化された部分であることに注意してください。

4

2 に答える 2

9

select *への呼び出しでそれらをラップできるように、列を個別に指定するようにクエリの上部の部分を変更する必要がありますnvl。お好みでご利用も可能coalesceです。

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 (... 
于 2016-07-06T22:54:30.537 に答える