Informatica表达式转换IIF到DECODE函数

时间:2018-04-22 14:50:52

标签: expression decode informatica iif

我有下表,我需要检查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可以实现同样的效果,但它太复杂了。

1 个答案:

答案 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
)