sql >> Database >  >> RDS >> Oracle

ORA-00904 ongeldige identifier op decodeer alias

Uit de documentatie (nadruk toegevoegd):

U kunt een kolomalias gebruiken, c_alias , om de direct voorafgaande uitdrukking in de selectielijst te labelen, zodat de kolom wordt weergegeven met een nieuwe kop. De alias hernoemt het item uit de selectielijst effectief voor de duur van de query. De alias kan worden gebruikt in deORDER BY clausule, maar geen andere clausules in de zoekopdracht.

U kunt dus niet verwijzen naar de alias in de where clausule, waar u op dit moment:

...
AND (account_amt NOT BETWEEN ...
...

De alias is op dat moment niet geldig, dus het zoekt naar een kolom met die naam in een van de tabellen en vindt er geen. Het is prima in de order by hoewel.

Je moet ofwel de alias vervangen door de herhaalde decode statement, of gebruik eventueel een subquery en verwijs vervolgens naar de alias in een where clausule in een buitenste zoekopdracht, maar dat kan uiteindelijk minder efficiënt zijn, afhankelijk van hoe selectief uw andere voorwaarden zijn.



  1. Hoe de SQL SUM-functie te gebruiken

  2. Hoe om te gaan met schrikkelseconden in Oracle

  3. MySQL-server beveiligen

  4. Hoe de laatste dag van vorige week in sql te krijgen?