Ho una (piuttosto complicata) istruzione SQL in cui seleziono i dati da molte diverse tabelle e per far fronte a una struttura di dati legacy errata, ho un paio di custom colonne che ottengono i loro valori in base ai valori di altre colonne. Ho attualmente risolto questo con CASE
dichiarazioni:Errore nome colonna non valido nella clausola WHERE, colonna selezionata 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...
ottengo tutti i risultati che mi aspetto quando si esegue la query in MS SQL Server Management Studio, ei nomi di colonna sono elencati come ho specificato nel mio AS
clausole. Tuttavia, per qualche motivo non sono autorizzato a utilizzare i valori condizionali in un'istruzione WHERE
. Se aggiungo
AND ChannelValue > Limit * p.Percentage/100
al termine della query, ottengo un errore su quella linea dicendo
Msg 207, livello 16, stato 1, riga 152
nome di colonna non valido 'ChannelValue'
Perché non è consentito? Cosa dovrei fare invece?