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
)