У меня есть (довольно сложный) оператор SQL, в котором я выбираю данные из множества различных таблиц, и, чтобы справиться с устаревшей структурой данных, у меня есть пара пользовательских столбцов, которые получают свои значения на основе значений из других столбцов. В настоящее время я решил это с помощью CASE
утверждений:
SELECT
...,
CASE channel
WHEN 1 THEN channel_1
WHEN 2 THEN channel_2
...
ELSE 0
END AS ChannelValue,
CASE channelu
WHEN 1 THEN channelu_1
WHEN 2 THEN channelu_2
...
ELSE '0'
END AS ChannelWithUnit,
...
FROM
...
--rest of statement continues with multiple joins and where/and clauses...
Я получаю все ожидаемые результаты при выполнении запроса в MS SQL Server Management Studio, а имена столбцов отображаются в списке, как я указал в моих предложениях AS
. Однако по какой-то причине я не могу использовать условные значения в операторе WHERE
. Если я добавлю
AND ChannelValue > Limit * p.Percentage / 100
в конце запроса я получаю сообщение об ошибке "1010 *"
Сообщение 207, Уровень 16, Состояние 1, Строка 152
Неверное имя столбца 'ChannelValue'
Почему это не разрешено? Что мне делать вместо этого?