我有下表,我需要检查4列的6种组合,并返回分配给它的唯一代码。附图是图像,下面是全文。
UNIQUE_CODE, TYPE, FLAG, VALUES, RETURN VALUE
40031, F ,P, ANY ,44570
40031, V ,P, Z ,44572
40031, V ,P, EXCEPT Z ,44574
10110, F ,R, ANY ,44571
10110, V ,R, Z ,44573
10110, V ,R, EXCEPT Z, 44575
我已经使用嵌套IIF在表达式转换的变量端口中实现了这一点,如下面的逻辑:
IIF ( UNIQUE_NUMBER = 40031 AND FLAG ='P' ,
IIF( TYPE ='F' ,44070,
IIF (TYPE = 'V' ,
DECODE (TRUE,IN (VALUES ,'Z'),44072,44074))),
IIF ( UNIQUE_NUMBER = 10110 AND FLAG ='R' ,
IIF( TYPE ='F' ,44071,
IIF (TYPE = 'V' ,
DECODE (TRUE,IN (VALUES,'Z'), 44073,44075)))))
然而现在想要通过DECODE实现相同,因为我被告知嵌套的IIF表达式可能会影响性能。
但是我担心DECODE可能会在第一个条件成立后立即退出。
有什么建议吗?我认为使用嵌套的DECODE可以实现同样的效果,但它太复杂了。
答案 0 :(得分:1)
DECODE
比嵌套IIF
更容易阅读。取决于它可能会或可能不会更快。无论如何,你可以使用以下模式构建它:
DECODE (True,
condition, value,
default)
你的情况应该是这样的(请仔细检查):
DECODE(True,
UNIQUE_NUMBER = 40031 AND FLAG ='P' AND TYPE ='F', 44070,
UNIQUE_NUMBER = 40031 AND FLAG ='P' AND TYPE ='V' AND IN(VALUES ,'Z'),44072,
UNIQUE_NUMBER = 40031 AND FLAG ='P' AND TYPE ='V' AND NOT IN(VALUES ,'Z'),44074,
UNIQUE_NUMBER = 10110 AND FLAG ='R' AND TYPE ='F', 44071,
UNIQUE_NUMBER = 10110 AND FLAG ='R' AND TYPE ='V', 44071 AND IN(VALUES,'Z'), 44073,
UNIQUE_NUMBER = 10110 AND FLAG ='R' AND TYPE ='V', 44071 AND NOT IN(VALUES,'Z'), 44075
)