我需要一个在没有结果时返回0的查询,ORACLE SQL

e5nszbig  于 2023-04-20  发布在  Oracle
关注(0)|答案(2)|浏览(535)

我不知道这是怎么回事,我试着这样做:

但结果永远不会返回0,我做错了什么?编辑:
表中的所有行
| 努姆|身份证|perc|
| --------------|--------------|--------------|
| 三|1|-20|
| 三|十九岁|-10|
| 三|五十八|-15|
| 三|八十八|-50|
| 三|三五一|-30|
| 三|六零二|二十五|
我使用“WHERE i.ID = '221'”是因为当表中不存在id为221的行时,我需要返回0。

ykejflvf

ykejflvf1#

在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的值,所以没有一行在id列中有NULL值,所以NVL不会产生0。

e3bfsja2

e3bfsja22#

我想应该是下面这样的:

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)

相关问题