Hola
Estoy realizando una consulta para un informe lotes de artículos y la vida restante que les queda, calculando un índice:
SELECT T1."ItemCode", T1."ItemName",T2."ItmsGrpNam" AS "Grupo de artículo", T1."OnHand" AS "Stock total de artículo", T0."WhsCode", T0."BatchNum", T0."Quantity" AS "Cantidad lote",T0."InDate", T0."ExpDate",
DAYS_BETWEEN(T0."InDate",T0."ExpDate") AS "Vida útil" ,
DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate") AS "Vida útil restante",
((DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate"))/(DAYS_BETWEEN(T0."InDate",T0."ExpDate")))*100 AS "IVR"
FROM OIBT T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" INNER JOIN OITB T2 ON T1."ItmsGrpCod" = T2."ItmsGrpCod"
WHERE T0."Quantity"<>0
ORDER BY T1."ItemName",T0."BatchNum",T1."ItemCode",T0."WhsCode"
Quiero filtrar esta consulta para que se muestren solo los valores inferiores a 25 en la columna “IVR”, y para ello hago lo siguiente (englobo la consulta en otro select y filtro del campo IVR en el where):
SELECT * FROM
(SELECT T1."ItemCode", T1."ItemName",T2."ItmsGrpNam" AS "Grupo de artículo", T1."OnHand" AS "Stock total de artículo", T0."WhsCode", T0."BatchNum", T0."Quantity" AS "Cantidad lote",T0."InDate", T0."ExpDate",
DAYS_BETWEEN(T0."InDate",T0."ExpDate") AS "Vida útil" ,
DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate") AS "Vida útil restante",
((DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate"))/(DAYS_BETWEEN(T0."InDate",T0."ExpDate")))*100 AS "IVR"
FROM OIBT T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" INNER JOIN OITB T2 ON T1."ItmsGrpCod" = T2."ItmsGrpCod"
WHERE T0."Quantity"<>0
ORDER BY T1."ItemName",T0."BatchNum",T1."ItemCode",T0."WhsCode") A
WHERE A."IVR"<25
Pero me lanza un error de que no se puede dividir por 0. Hay algunos lotes que no tienen indicada la fecha de vencimiento y por eso ese campo parece que almacena internamente un NULL en algunos casos, en lugar de un número. ¿Cómo podría hacer que en esos casos lo entienda como un 0 o un valor que no me de error al realizar ese filtro? He probado con IFNULL, NDIV0, IF, CASE, ...
Un saludo