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

Usando COALESCE correctamente en la cláusula WHERE

Podemos usar ROW_NUMBER aquí para seleccionar lo que quieras con prioridades:

WITH cte AS (
    SELECT f.*, ROW_NUMBER() OVER (ORDER BY DECODE(ITEM_NO, 'A15354', 1,
                                                            'CURR_NOT_IN_TABLE', 2,
                                                            'GR0013', 3,
                                                            'GUOIUW', 4, 5)) rn
    FROM fruit f
    WHERE spoiled = 'Y'
)

SELECT ITEM_NAME
FROM cte
WHERE rn = 1;

La idea aquí es asignar una prioridad de 1 a 5 para cada artículo que se echa a perder. Usamos ROW_NUMBER para generar una secuencia que siempre comience con 1 siendo la prioridad más alta disponible.