Z dokumentacji (podkreślenie dodane):
Możesz użyć aliasu kolumny, c_alias
, aby nadać nazwę bezpośrednio poprzedzającemu wyrażeniu na liście wyboru, tak aby kolumna była wyświetlana z nowym nagłówkiem. Alias skutecznie zmienia nazwę elementu listy wyboru na czas trwania zapytania. Alias może być używany w ORDER BY
klauzula, ale nie inne klauzule w zapytaniu.
Więc nie możesz odwoływać się do aliasu w where
klauzula, gdzie w tej chwili masz:
...
AND (account_amt NOT BETWEEN ...
...
Alias nie jest prawidłowy w tym momencie, więc szuka kolumny o tej nazwie w jednej z tabel i nie znajduje żadnej. Jest w porządku w order by
chociaż.
Musisz albo zastąpić alias powtórzonym decode
lub ewentualnie użyj podzapytania, a następnie odwołaj się do aliasu w where
klauzula w zewnętrznym zapytaniu, ale może to być mniej wydajne w zależności od tego, jak selektywne są Twoje inne warunki.