Мне нужен запрос, который возвращает 0, когда результаты не найдены, ORACLE SQL

Я не знаю, что здесь происходит, я пробую это:

Но результат никогда не возвращает 0, что я делаю не так? Обновлено:

все строки в таблице

число идентификатор проц 3 1 -20 3 19 -10 3 58 -15 3 88 -50 3 351 -30 3 602 -25

Я использую «WHERE i.ID = '221'», потому что мне нужно вернуть 0, когда в таблице не существует строки с идентификатором 221.

Он никогда не доходит до последнего из-за первого. Как только оператор when возвращает значение true, оператор case закрывается.

Andrew 12.04.2023 17:12

Пожалуйста, добавьте несколько строк образцов данных и ожидаемый результат.

The Impaler 12.04.2023 17:13
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что это должно быть что-то вроде ниже:

with qt as (
--- here comes your query returning the desired result if found

)
select test
from qt
union all
select 0 --- this produces 0 when your query returns  no rows
from dual where not exists (select 1 from qt)
Ответ принят как подходящий

В Oracle оператор CASE не проходит — он ломается/выходит при первом успешном тесте. Поэтому ваши первые два теста:

WHEN (i.id IS NULL) THEN..
WHEN (i.id IS NOT NULL) THEN..

Покрыть 100% всех возможных случаев. Значение либо NULL, либо NOT NULL, поэтому одно из этих двух будет истинным, а остальные ваши тесты никогда не будут оцениваться. Я думаю, вам, вероятно, нужны отдельные столбцы для выполнения различных тестов, которые вы хотите. По крайней мере, один столбец для обнуления и один столбец для длины и всего, что вам нужно.

Что касается следующего выражения, у вас есть NVL(i.id,0) , но в вашем предложении WHERE вы запрашиваете id = '221'. Поскольку вы возвращаете только значения 221, ни одна из строк не будет иметь значение NULL в столбце id, поэтому NVL не выдаст 0.

Другие вопросы по теме