多くの異なるテーブルからデータを選択する(かなり複雑な)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...
AS
MS SQL Server Management Studioでクエリを実行すると期待するすべての結果が得られ、句で指定したとおりに列名が一覧表示されます。ただし、何らかの理由で、WHERE
ステートメントで条件値を使用することは許可されていません。追加した場合
AND ChannelValue > Limit * p.Percentage / 100
クエリの最後に、その行に次のようなエラーが表示されます
メッセージ207、レベル16、状態1、行152
無効な列名'ChannelValue'
なぜこれが許可されないのですか?代わりに何をすべきですか?