我有一条比较复杂的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
在查询结束时,我会在那行代码上收到一个错误提示:
Msg 207, Level 16, State 1, Line 152
Invalid column name 'ChannelValue'
为什么不允许这样做?我应该怎么做呢?