sql >> データベース >  >> RDS >> Oracle

ORA-00904デコード・エイリアスの識別子が無効です

    ドキュメントから(強調を追加):

    列エイリアスc_aliasを使用できます 、選択リストの直前の式にラベルを付けて、列が新しい見出しで表示されるようにします。エイリアスは、クエリの期間中、選択リストアイテムの名前を効果的に変更します。 エイリアスはORDER BYで使用できます 句ですが、クエリ内の他の句ではありません。

    そのため、whereでエイリアスを参照することはできません 条項、現時点であなたが持っているところ:

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

    エイリアスはその時点では有効ではないため、テーブルの1つでその名前の列を探していますが、見つかりません。 order byで問題ありません

    エイリアスを繰り返しのdecodeに置き換える必要があります ステートメント、またはサブクエリを使用して、whereのエイリアスを参照することもできます 外部クエリの句ですが、他の条件の選択度によっては、効率が低下する可能性があります。



    1. 更新ステートメントの冗長データ

    2. MySQLで複数の列を更新する方法

    3. テーブル内のすべての列を一覧表示するにはどうすればよいですか?

    4. SQLServerでGUIを使用して列を追加または削除する方法-SQLServer/T-SQLチュートリアルパート39