À 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 leORDER 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.