Informatica Expression Преобразование IIF в функцию DECODE

У меня есть следующая таблица, где мне нужно проверить 6 комбинаций для 4 столбцов и вернуть уникальный код, присвоенный ему. Прикрепленное изображение и ниже полный текст.

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 ответ

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
)
Другие вопросы по тегам