Прописать в СЛУЧАЕ запроса SQL (oracle) условие, которое выполняется, когда «данные не найдены»

#sql #oracle #oracle11g #oracle-apex

#sql #Oracle #oracle11g #oracle-apex

Вопрос:

У меня есть запрос, он работает полностью, и без проблем. Вот запрос :.

  WITH rowsel as (select   OBL_TAREDAT   ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO   from
                                (select  OBL_TAREDAT    ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO from  WAYBILLS where EXTERNAL_ID = json_value ( {{CLOB}}, '$.data.external_id') 
                                 and OBL_TTN is null))
SELECT CASE
WHEN  json_value ( {{CLOB}}, '$.data_weight.stable') = 'false'  THEN 81
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '1'   THEN 41
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '1'     THEN 21
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '-1'     THEN 62
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '-1'    THEN 61
ELSE 0 END
FROM rowsel
 
 

В нем я ищу 1 запись по внешнему id, и в зависимости от данных, которые я нахожу к ней с помощью cases я выбираю, какой скрипт я хочу получить на выходе.
Я хочу, чтобы, когда я не нахожу никакой записи по внешнему идентификатору, я мог ввести «если счетчик = 0, то 1». Я попробовал свой вариант, но он не сработал, буду благодарен за помощь.

  WITH rowsel as (select  id, OBL_TAREDAT    ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO   from
                                (select id, OBL_TAREDAT ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO from  WAYBILLS where EXTERNAL_ID = json_value ( {{CLOB}}, '$.data.external_id') 
                                 and OBL_TTN is null))
SELECT CASE
WHEN count(rowsel.id) = 0 THEN 1
WHEN  json_value ( {{CLOB}}, '$.data_weight.stable') = 'false'  THEN 81
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '1'   THEN 41
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '1'     THEN 21
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '-1'     THEN 62
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '-1'    THEN 61
ELSE 0 END
FROM rowsel
group by rowsel.id, rowsel.OBL_TAREDAT  ,rowsel.OBL_BRUTTODAT,rowsel.DIRECTIONID,rowsel.TARE,rowsel.BRUTTO
 
 

Ответ №1:

Я думаю, вам нужно UNION ALL и NOT EXISTS следующим образом:

 WITH rowsel as (select   OBL_TAREDAT   ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO   from
                                (select  OBL_TAREDAT    ,OBL_BRUTTODAT,DIRECTIONID,TARE,BRUTTO from  WAYBILLS where EXTERNAL_ID = json_value ( {{CLOB}}, '$.data.external_id') 
                                 and OBL_TTN is null))
SELECT CASE
WHEN  json_value ( {{CLOB}}, '$.data_weight.stable') = 'false'  THEN 81
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '1'   THEN 41
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '1'     THEN 21
WHEN rowsel.OBL_TAREDAT  is null and rowsel.DIRECTIONID = '-1'     THEN 62
WHEN rowsel.OBL_BRUTTODAT  is null and rowsel.DIRECTIONID = '-1'    THEN 61
ELSE 0 END
FROM rowsel
UNION ALL
SELECT 1 FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM rowsel)