Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Korrekte Verwendung von COALESCE in der WHERE-Klausel

Wir können ROW_NUMBER verwenden hier, um auszuwählen, was Sie mit Prioritäten wünschen:

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;

Die Idee dabei ist, jedem beschädigten Artikel eine Priorität von 1 bis 5 zuzuweisen. Wir verwenden ROW_NUMBER um eine Sequenz zu generieren, die immer mit 1 beginnt, was die höchste verfügbare Priorität ist.