Tôi có một câu lệnh SQL (khá phức tạp) nơi tôi chọn dữ liệu từ nhiều bảng khác nhau và để đối phó với cấu trúc dữ liệu kế thừa xấu, tôi có một vài tùy chỉnh các cột nhận giá trị của chúng dựa trên các giá trị từ các cột khác. Hiện tại tôi đã giải quyết điều này với CASE
báo cáo:Lỗi tên cột không hợp lệ trong mệnh đề WHERE, cột được chọn với 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...
tôi nhận được tất cả các kết quả tôi mong muốn khi thực hiện truy vấn trong MS SQL Server Management Studio, và các tên cột được liệt kê như tôi đã quy định tại AS
khoản của tôi. Tuy nhiên, vì một lý do nào đó, tôi không được phép sử dụng các giá trị có điều kiện trong câu lệnh WHERE
. Nếu tôi thêm
AND ChannelValue > Limit * p.Percentage/100
ở phần cuối của các truy vấn, tôi nhận được một lỗi trên dòng đó nói
Msg 207, Level 16, State 1, Line 152
tên cột không hợp lệ 'ChannelValue'
Tại sao điều này không được phép? Tôi nên làm gì?