sql >> Base de Datos >  >> RDS >> Oracle

Manejo de Null en la función más grande en Oracle

Su pregunta involucra específicamente dos columnas, pero me encontré con situaciones en las que necesitaba GREATEST /LEAST de más de dos columnas. En esos escenarios puedes usar COALESCE y expanda la solución a tantas columnas como desee.

Aquí hay un ejemplo con tres columnas a , b y c :

GREATEST(
    COALESCE(a, b, c),
    COALESCE(b, c, a),
    COALESCE(c, a, b)
)

Tenga en cuenta que el orden de las columnas de COALESCE cambia para que cada columna de entrada sea el primer elemento COALESCE al menos una vez. La única vez que esto devolverá NULL es cuando todas las columnas de entrada son NULL.

En la "solución general" el número de COALESCE declaraciones será igual al número de columnas de entrada:

GREATEST(
    COALESCE(col1, col2, col3, col4, ....),
    COALESCE(col2, col3, col4, ...., col1),
    COALESCE(col3, col4, ...., col1, col2),
    COALESCE(col4, ...., col1, col2, col3),
    COALESCE(...., col1, col2, col3, col4),
    ...
)