Reescribe la lógica de “if” a una instrucción “DECODE” en Informatica.
Tengo una lógica que necesito convertir en una instrucción de decodificación.
Mi lógica está abajo:
if emptr =='SBCS':
empcd=empvar
else:
if empcal != depcal and empid in ('SSC','HSC'):
empcd = (emp_sal/avgsal) * empad
elif empcal != depcal and empid not in ('SSC','HSC'):
empcd = emp_del
else:
empcd = emp_dev
Intenté escribir la lógica en una expresión:
IIF ( emptr ='SBCS' , empvar , IIF(empcal != depcal,IIF(empcal != depcal and empid in ('SSC','HSC'),(emp_sal/avgsal) * empad,emp_del),emp_dev))
He escrito una lógica de DECODE, pero no estoy seguro si está correcta o incorrecta:
DECODE(TRUE,
empid='SBCS', empvar,
empcal != depcal and (empid = 'SSC' or empid = 'HSC'), (emp_sal/avgsal) * empad,
empcal != depcal and (empid != 'SSC' or empid != 'HSC'), emp_del,
emp_dev
)
Si la lógica de DECODE no está correcta, siéntase libre de compartir su lógica.
davy.ai
La lógica de
DECODE
parece ser incorrecta ya que las condiciones después de la primera no son mutuamente excluyentes, y la lógica para las segunda y tercera condiciones también es incorrecta.Una posible declaración alternativa de decodificación podría ser:
Esta declaración primero verifica si
emptr
es igual a'SBCS'
, si es así, devuelveempvar
. Si no es así, verifica siempcal
no es igual adepcal
. Si es así, verifica siempid
es'SSC'
o'HSC'
. Si es así, devuelve(emp_sal/avgsal) * empad
. Siempid
no coincide con ninguno de estos, devuelveemp_del
. Si no se cumplen las dos primeras condiciones, simplemente devuelveemp_dev
.