我需要在oracle中编写一个查询来检查空值并显示值

时间:2017-02-10 14:12:12

标签: oracle

我希望查询执行此操作。

if parameter5 is not null then

select parameter1 from table where request_id = (select parameter5 from table)

if parameter is null then
select parameter1 from table

parameter5包含parent的请求id。如果parameter5不为null,那么我需要父request的parameter1的值。如果parameter5为null则我需要parameter1的值。

parameter1 | parameter5 | request_id
-----------|------------|------------
null       |  abc       | 123
123        |  bcd       | 234
null       |  xyz       | 456

说,表格看起来像这样。对于request_id 234,显示的参数5值应为' abc'。对于request_id 456,显示的参数5值应该是' xyz'

如何检查空状态并获取适当的值。

3 个答案:

答案 0 :(得分:1)

如果我理解你的需要,你可能需要:

select t1.request_id, coalesce(t2.parameter5, t1.parameter5)
from yourTable t1
       left outer join yourTable t2 on ( t1.parameter1 = t2.request_id)

使用您的样本数据,结果将是:

REQUEST_ID COA
---------- ---
       234 abc
       456 xyz
       123 abc

答案 1 :(得分:0)

这很难说,因为你对问题的描述有几个内部矛盾。 (这是一种花哨的方式来说“它毫无意义。”)但是,猜测你发布的内容,也许这就是你所需要的:

select request_id,
       case when parameter1 is null then parameter5
            else (select parameter5 from tbl where request_id = t.parameter1) 
        end as requested_value
from   tbl t
;

其中tbl是您的表名称(不能是table,因为这是保留字)。

答案 2 :(得分:0)

with test_query as(
select 123 parameter1,'bcd' parameter5,234 request_id from dual
union all
select null , 'abc' , 123  from dual
union  all
select null, 'xyz',456 from dual
)
select  parameter5,nvl(prior request_id,request_id)
from test_query
where parameter1 is null
connect by  prior parameter1=request_id