Buenas
Al final se me ha encendido la bombilla y he conseguido realizarlo. Dejo aquí la solución que he aplicado por si alguna vez alguien se encuentra un problema similar.
No estoy seguro de si es la solución más óptima, pero al menos funciona
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",
CASE
WHEN T0."ExpDate" IS NULL THEN 0
WHEN T0."InDate" IS NULL THEN 0
ELSE
CASE
WHEN DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate")=0 THEN 0
WHEN DAYS_BETWEEN(T0."InDate",T0."ExpDate")=0 THEN 0
ELSE
(DAYS_BETWEEN(CURRENT_DATE, T0."ExpDate")/DAYS_BETWEEN(T0."InDate",T0."ExpDate"))*100
END
END 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
Un saludo