Tengo una declaración de SQL (bastante complicada) en la que selecciono datos de muchas tablas diferentes, y para lidiar con una estructura de datos heredada, tengo un par de personalizados columnas que obtienen sus valores basados en valores de otras columnas. He resuelto actualmente esto con CASE
declaraciones:Error de nombre de columna inválido en la cláusula WHERE, columna seleccionada con 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...
consigo todos los resultados que cabe esperar cuando se ejecuta la consulta en MS SQL Server Management Studio, y los nombres de columna se enumeran como he indicado en mis AS
cláusulas. Sin embargo, por alguna razón, no estoy autorizado a usar los valores condicionales en una declaración WHERE
. Si añado
AND ChannelValue > Limit * p.Percentage/100
al final de la consulta, me sale un error en esa línea diciendo
Msg 207, nivel 16, estado 1, línea 152
nombre de columna no válido 'ChannelValue'
¿Por qué no se permite? ¿Qué debería hacer?