Как заставить pivot иметь значение по умолчанию в oracle? - PullRequest
0 голосов
/ 24 апреля 2019

Этот вопрос может быть связан с моим другим вопросом .

У меня есть запрос, который делает разворот на QTDE и ATR, но также и на дату, поэтому я сделалследующее

SELECT      *
FROM (
    SELECT  ...
            GPC.EVENT_VALUE,
            GPC.IDENTIFIER,
            TO_CHAR(TO_DATE(GPC.SCHEDULE_DATE), 'MM') AS SCHEDULE_DATE
    FROM    GP_CALCULATION GPC
    WHERE   RO_CODE = 'MQ'
    AND     GPC.IDENTIFIER IN ('QTDE', 'ATR')
) 
PIVOT(   
    SUM(EVENT_VALUE)
    FOR (IDENTIFIER, SCHEDULE_DATE)
    IN (
        ('QTDE', '01') AS QTDE01,
        ('ATR', '01') AS ATR01,
        ('QTDE', '02') AS QTDE02,
        ('ATR', '02') AS ATR02,
        ('QTDE', '03') AS QTDE03,
        ('ATR', '03') AS ATR03,
        ('QTDE', '04') AS QTDE04,
        ('ATR', '04') AS ATR04,
        ('QTDE', '05') AS QTDE05,
        ('ATR', '05') AS ATR05,
        ('QTDE', '06') AS QTDE06,
        ('ATR', '06') AS ATR06,
        ('QTDE', '07') AS QTDE07,
        ('ATR', '07') AS ATR07,
        ('QTDE', '08') AS QTDE08,
        ('ATR', '08') AS ATR08,
        ('QTDE', '09') AS QTDE09,
        ('ATR', '09') AS ATR09,
        ('QTDE', '10') AS QTDE10,
        ('ATR', '10') AS ATR10,
        ('QTDE', '11') AS QTDE11,
        ('ATR', '11') AS ATR11,
        ('QTDE', '12') AS QTDE12,
        ('ATR', '12') AS ATR12
    )
)         

Задача

Когда нет совпадения на оси, это выглядит так:

query

Я использую PL / SQL Developer, чтобы увидеть результаты, и я получаю это «пустое», что я не знаю, что это такое.Это равно ''?

Как сделать так, чтобы значения, которые являются "пустыми", стали 0?

1 Ответ

1 голос
/ 24 апреля 2019

Это означает, что для этого идентификатора / месяца в вашей таблице не было данных (или были только нулевые значения).Если вы хотите видеть 0, используйте case или nvl в select части, как в следующем примере:

-- sample data 
with gp_calculation(event_value, identifier, schedule_date, ro_code) as (
    select 12, 'QTDE', date '2018-12-24', 'MQ' from dual union all
    select  7, 'QTDE', date '2018-12-24', 'MQ' from dual union all
    select 42, 'ATR',  date '2018-11-24', 'MQ' from dual union all
    select 13, 'QTDE', date '2018-11-24', 'MQ' from dual union all
    select 17, 'QTDE', date '2018-11-24', 'MQ' from dual )
-- end of data

select nvl(q10, 0) qtde10, nvl(a10, 0) atr10, 
       nvl(q11, 0) qtde11, nvl(a11, 0) atr11, 
       nvl(q12, 0) qtde12, nvl(a12, 0) atr12
  from (select  gpc.event_value, gpc.identifier,
                to_char(to_date(gpc.schedule_date), 'MM') as schedule_date
          from  gp_calculation gpc
          where ro_code = 'MQ'
            and gpc.identifier in ('QTDE', 'ATR')) 
  pivot(sum(event_value) for (identifier, schedule_date) in (
                               ('QTDE', '10') as q10, ('ATR', '10') as a10,
                               ('QTDE', '11') as q11, ('ATR', '11') as a11,
                               ('QTDE', '12') as q12, ('ATR', '12') as a12 ))

Результат:

    QTDE10      ATR10     QTDE11      ATR11     QTDE12      ATR12
---------- ---------- ---------- ---------- ---------- ----------
         0          0         30         42         19          0
...