我有一个(相当复杂的)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
在查询结束时,我在该行收到一条错误消息
消息 207,级别 16,状态 1,第 152 行
无效的列名称“ChannelValue”
为什么不允许这样做?我应该怎么做?