#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)