PLSQL选择第一个值(如果存在),否则选择另一个值

时间:2018-11-15 15:26:04

标签: sql oracle plsql

我有一张这样的桌子

ID NTYPE
1 0
2 0
3 1
4 2

我需要选择一个选项,以根据NTYPE的列表(从1到N)获取所有ID,但是如果不存在任何NTYPE列表,则获取NTYPE = 0的位置。

例如:

  • 如果NTYPE列表= 1,则ID必须为3
  • 如果NTYPE列表= 1,2,则ID必须为3,4
  • 如果NTYPE列表= 2,3,则ID必须为1,2,4 ... 1和2,因为没有记录,其中ntype = 3,然后获得NTYPE = 0 ...

我可以创建一个可以执行此操作的过程,但是我希望在选择时执行

有可能吗?有想法吗?

1 个答案:

答案 0 :(得分:0)

您要使用要查找的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)
             );