Я пытаюсь изменить оператор выбора SQL, чтобы выбрать обратное значение столбца (как, отрицательное, если значение было положительным, положительным, если значение было отрицательным) на основе значение другого столбца.Выявление столбца в операторе Oracle SQL CASE
Это (не обратное развитие) работы:
BSEG_WBTR as INVOICE_AMOUNT
Но это не делает:
CASE
WHEN BSEG_SHKZG = 'S' THEN
-BSEG_WBTR
ELSE
BSEG_WBTR
END AS INVOICE_AMOUNT,
Давать ошибку:
[Error] Execution (13: 45) : ORA-00904: «BSEG_WBTR»: недопустимый идентификатор
Что, по-видимому, означает, что BSEG_WBTR больше не отображается один раз внутри оператора CASE.
Как разоблачить столбец, который будет использоваться внутри оператора CASE?
Вы уверены, что именно на это указывает ошибка? То, что вы написали, должно работать, неверно, что столбец выходит за пределы области действия в операторе CASE. Это точная часть запроса? (Я спрашиваю, потому что ошибка начинается с столбца 45, я не вижу ничего 45 символов в том, что вы написали). Какая строка, в частности, строка 13 в вашем коде? – mathguy
@Allan Ваш новый SQL сделал трюк и работает. Если вы хотите воссоздать ответ, я бы с радостью принял его. –
Является ли BSEG_WBTR псевдоним? Если это так, оно не будет доступно в выбранном статусе. Если нет, и он доступен на выбранном вами столе, вам нечего делать, чтобы разоблачить его внутри оператора case. – mo2