Если у меня нет информации в результате, я получаю 0 oracle


у меня есть следующий query в Oracle SQL который возвращает меня в результате "не существует" или "черный", так сказать, поскольку я фильтрую его по идентификатору, и такой идентификатор не существует, который ставит меня в 0.

в следующем примере изменяется сумма, которую я имею в соответствии с идентификатором, который я посылаю, чтобы вызвать, но если у меня есть идентификатор, который не имеет данных, я ничего не trai(я не trai его в списке)

introducir la descripción de la imagen aquí

в этом запросе я посылаю вызов AI, но поскольку у вас нет данных, я не он показывает, и я хотел бы поставить "0" , чтобы получить наш весь список, который я посылаю, чтобы позвонить.

это запрос, который я выполняю.

запрос

    SELECT NEXTSTAGE,count(USN) as QTY ,CASE WHEN USN = 0  THEN USN ELSE 0 END FROM sfcfa912.SFCUSN@ro_prd_wmx912 WHERE Line ='R1' and SUBSTR (USN,1,1) = 'R' AND NEXTSTAGE IN 
('AI','AO','H1','IN','WT','TO','TN','PT','SU','WB','QN','TP','BO','CS','WP','WM','RN','RO','IO','IP') 
and trunc (updatetime) >= trunc (sysdate-7)  group by NEXTSTAGE
 1
Author: Ortiztoto12, 2021-05-06

1 answers

Вы можете создать производную таблицу на лету со значениями, которые вас интересуют, отображаемыми в результирующем наборе данных, даже если в базовой таблице нет записи с этим значением.

Простым способом создания этой таблицы результатов является серия объединений операторов типа select 'XX' from dual', где XX - каждое значение в списке, которое в настоящее время находится в предложении in ().

К этой новой таблице мы можем сделать left join с запросом, который вы уже возвращает результаты.

Кусок кода лучше тысячи слов, идея в SQL-это что-то вроде:

select v1.Stage, coalesace(r1.QTY, 0)
  from (select 'AI' Stage from dual
        union all select 'AO' from dual 
        union all select 'H1' from dual
        union all select 'IN' from dual
        union all select 'WT' from dual
        union all select 'TO' from dual
        union all select 'TN' from dual
        union all select 'PT' from dual
        union all select 'SU' from dual
        union all select 'WB' from dual
        union all select 'QN' from dual
        union all select 'TP' from dual
        union all select 'BO' from dual
        union all select 'CS' from dual
        union all select 'WP' from dual
        union all select 'WM' from dual
        union all select 'RN' from dual
        union all select 'RO' from dual
        union all select 'IO' from dual
        union all select 'IP'  from dual
       ) v1
       left join 
       (
       SELECT   NEXTSTAGE
              , count(USN) as QTY 
         FROM sfcfa912.SFCUSN@ro_prd_wmx912 
        WHERE Line = 'R1' 
          and SUBSTR (USN,1,1) = 'R' 
          and trunc (updatetime) >= trunc (sysdate-7)  
        group by NEXTSTAGE
       ) r1
       on v1.Stage = r1.NEXTSTAGE
  1
Author: jachguate, 2021-05-07 06:45:30