Dalla documentazione (enfasi aggiunta):
Puoi utilizzare un alias di colonna, c_alias
, per etichettare l'espressione immediatamente precedente nell'elenco di selezione in modo che la colonna venga visualizzata con una nuova intestazione. L'alias rinomina in modo efficace l'elemento dell'elenco di selezione per la durata della query. L'alias può essere utilizzato nel ORDER BY
clausola, ma non altre clausole nella query.
Quindi non puoi fare riferimento all'alias nel where
clausola, dove al momento hai:
...
AND (account_amt NOT BETWEEN ...
...
L'alias non è valido a quel punto, quindi sta cercando una colonna con quel nome in una delle tabelle e non la trova. Va bene in order by
però.
Devi sostituire l'alias con il decode
ripetuto istruzione, o eventualmente utilizzare una sottoquery e quindi fare riferimento all'alias in un where
clausola in una query esterna, ma potrebbe risultare meno efficiente a seconda di quanto siano selettive le altre condizioni.