当两个exp不匹配时,我想获取null,例如nullif(exp1,exp2)将在相同时返回null,在不相同时返回第一个exp。
我已经尝试在子查询或创建函数的帮助下进行操作,但是需要一种简单,简单,标准的方法。
select * from table
where service_type = 'X3'
or (1 <> (select nvl(min(1),2) from table where service_type = 'X3')
and service_type is null)
此查询返回我想要的结果,但是我不需要使用子查询。
表的数据类似
service_type
------------
X4
X3
null
我想获取service_type匹配X3值是否返回X3,但如果不匹配(如X5),则返回null以匹配空记录。
当service_type ='X3'
service_type
------------
X3
当service_type ='X5'或其他任何类似'X%'的内容时,将返回null
service_type
------------
null
答案 0 :(得分:2)
什么情况下
select case when service_type='x3' then service_type else null end
from table_name
答案 1 :(得分:0)
我认为您需要一个子查询来获取您实际想要实现的逻辑:
select t.*
from t
where t.service_type = :value or
(t.service_type is null and
not exists (select 1 from t t2 where t2.service_type = :value)
);
您还可以使用窗口功能:
select t.*
from (select t.*, count(*) over (partition by service_type) as cnt
from t
where service_type = :value or service_type is null
) t
where service_type = :value or
(cnt = 0 and service_type is null);