select status_a,status_b from test
如果使用oracle decode函数a并且如果status_a或status_b的值之一为null,则如何解码status_a
,status_b
以下的值。
if status_a='Y' and status_b='Y' then 'Y'
if status_a='Y' and status_b='N' then 'N'
if status_a='N' and status_b='Y' then 'N'
if status_a='N' and status_b='N' then 'N'
此致
Chaituhara
答案 0 :(得分:6)
为什么要使用DECODE
? CASE
似乎更适合
CASE WHEN status_a = 'Y' and status_b = 'Y' THEN 'Y'
WHEN status_a = 'Y' and status_b = 'N' THEN 'N'
WHEN status_a = 'N' and status_b = 'Y' THEN 'N'
WHEN status_a = 'N' and status_b = 'N' THEN 'N'
END
当然,你发布的逻辑似乎没有意义。在status_a = 'Y' or status_b = 'Y'
评估为TRUE时,status_a = 'Y' or status_b = 'N'
评估为FALSE的唯一方法是status_a = 'N'
和status_b = 'N'
。但这意味着永远不会达到第三和第四个分支。如果您的意思是and
而不是or
,那么逻辑就有意义了。但在这种情况下,您可以将其简化为
CASE WHEN status_a = 'Y' and status_b = 'Y' THEN 'Y'
ELSE 'N'
END
答案 1 :(得分:2)
如果您的意思是AND而不是OR,那么可以使用解码来完成:
decode(status_a,'Y',
decode(status_b,'Y','Y','N'),
'N')
或者这可以简化为:
decode(status_a||status_b,'YY','Y','N')
答案 2 :(得分:0)
根据你猜测的最后一条评论,你说的是,任何一个值都是Y,那么结果应该是Y,如果一个是null,那么它也应该是Y.
我希望下面的解码工作正常,以满足您的要求。
decode(status_a||Status_b,'YY','Y','YN','Y,'NY','Y','NN','N','Y')