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.
您可以在表达式外使用聚合函数 min
或 max
:
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;
当我需要验证 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.
您可以在表达式外使用聚合函数 min
或 max
:
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;