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

ORA-00904 identifiant invalide sur l'alias de décodage

À partir de la documentation (soulignement ajouté) :

Vous pouvez utiliser un alias de colonne, c_alias , pour étiqueter l'expression immédiatement précédente dans la liste de sélection afin que la colonne soit affichée avec un nouvel en-tête. L'alias renomme effectivement l'élément de la liste de sélection pour la durée de la requête. L'alias peut être utilisé dans le ORDER BY clause, mais pas les autres clauses de la requête.

Vous ne pouvez donc pas faire référence à l'alias dans le where clause, où pour le moment vous avez :

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

L'alias n'est pas valide à ce stade, il recherche donc une colonne portant ce nom dans l'une des tables et n'en trouve pas. C'est bien dans le order by cependant.

Vous devez soit remplacer l'alias par le decode répété instruction, ou éventuellement utiliser une sous-requête, puis faire référence à l'alias dans un where clause dans une requête externe, mais cela pourrait finir par être moins efficace en fonction de la sélectivité de vos autres conditions.