PLSQL Выберите первое значение, если существует, в противном случае выберите другое значение - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть такая таблица

ID NTYPE
1 0
2 0
3 1
4 2

Мне нужно выбрать, чтобы получить все идентификаторы в соответствии со списком NTYPE (от 1 до N), но если какой-либо из списка NTYPE не существует, то получитьгде NTYPE = 0 ..

Например:

  • Если список NTYPE = 1, то идентификаторы должны быть 3
  • Если список NTYPE = 1,2, тоИдентификаторы должны быть 3,4
  • Если список NTYPE = 2,3, то идентификаторы должны быть 1,2,4 ... 1 и 2, потому что нет записей, где ntype = 3, а затем получить, где NTYPE = 0...

Я могу сделать процедуру, которая может сделать это, но я бы хотел сделать это в виде выбора

Возможно ли это?Любая идея?

1 Ответ

0 голосов
/ 15 ноября 2018

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

with n as (
      select 1 as ntype from dual union all
      select 2 as ntype from dual
     )
select t.*
from t
where t.ntype in (select ntype from n)
union all
select t.*
from t
where t.ntype = 0 and
      exists (select 1
              from n
              where not exists (select 1 from t where t.ntype = n.ntype)
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...