Select 案例,当没有数据时 return

Select Case, when no data return

当我需要验证 select 查询的 return 是否为空或有值时,是否可以执行 SELECT CASE、decode、nvl 或其他查询函数? 例如,我有这个:

Record |  type  | id_customer
-------+--------+-------------
1      |    T   | cus1
2      |    A   | cus2
3      |    T   | cus3
4      |        | cus4

如果我这样做:

select decode(type,'T','Main','A','Adicional','none') from table where record=1;

我得到主要的。

如果我这样做:

select decode(type,'T','Main','A','Adicional','none') from table where record=4;

我得到 none。

但是如果我这样做:

select decode(type,'T','Main','A','Aditional','none') from table where record=5;

我一无所获,很合逻辑。因此,我需要在行存在时获取解码值,如果行不存在则获取文本。

因此,我尝试使用 SELECT CASE,但无法使用 COUNT 获取值。例如像这样:

SELECT 
CASE 
WHEN count(1)>0 THEN decode(type,'T','Main','A','Aditional','none')
ELSE '-'
END
FROM TABLE WHERE record=5;

并得到一个'-',如果记录为2,则相同,得到'Aditional'

非常感谢。

这是一个选项:

select decode(type,'T','Main','A','Aditional','none') 
  from table 
 where record = 5
 union all
select '-'
  from dual 
 where not exists (select 1 from table where record = 5);

它选择 record = 5 的记录并用 '-' 统一它们,如果没有记录退出 record = 5。检查这个 Fiddle.

您可以在表达式外使用聚合函数 minmax

select max(decode(type,'T','Main','A','Aditional','none')) 
from table
where record=5;

如果查询 returns 一行,您将获得该行的值。如果查询 returns 0 行,你会得到 NULL.
然后您可以使用 nvl:

替换 NULL
select nvl(max(decode(type,'T','Main','A','Aditional','none')), ' - ')
from table
where record=5;

编辑
另外,如果您需要从多个字符串中选择一个:

select decode(max(decode(type,'T', 2, 'A', 1, 0)), 0, 'none', 1, 'Additional', 2, 'Main', null, ' - ')
from table
where record=5;