Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation correcte de COALESCE dans la clause WHERE

Nous pouvons utiliser ROW_NUMBER ici pour sélectionner ce que vous voulez avec des priorités :

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;

L'idée ici est d'attribuer une priorité de 1 à 5 pour chaque élément qui est gâté. Nous utilisons ROW_NUMBER pour générer une séquence commençant toujours par 1 étant la plus haute priorité disponible.