Si un argument est NULL, vous voulez prendre le plus petit des autres arguments. Si tous les arguments sont NULL, vous voulez retourner NULL.
Je pourrais utiliser quelque chose comme ça pour deux arguments :
LEAST(NVL(colA,colB), NVL(colB,colA))
Cela commence à devenir moche pour> 2 arguments cependant :
LEAST(COALESCE(colA,colB,colC)
,COALESCE(colB,colA,colC)
,COALESCE(colC,colA,colB))
À quel point je commencerais à considérer les valeurs magiques ; mais cela peut être bogué (par exemple, que se passe-t-il si l'une des valeurs légitimement est la valeur magique ?) :
SELECT CASE WHEN r = maxv THEN NULL ELSE r END AS result
FROM (SELECT LEAST(NVL(:colA,maxv)
,NVL(:colB,maxv)
,NVL(:colC,maxv)) AS r, maxv
FROM (SELECT 9.999999999999999999999999999999999999999e125
AS maxv FROM DUAL));