Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-00904 identificatore non valido sull'alias di decodifica

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.