使用oracle decode解码两个值

时间:2013-09-05 21:32:15

标签: oracle

select status_a,status_b from test 

如果使用oracle decode函数a并且如果status_a或status_b的值之一为null,则如何解码status_astatus_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

3 个答案:

答案 0 :(得分:6)

为什么要使用DECODECASE似乎更适合

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')