查询中的"无效列名称"错误,具有逐个语句和外部选择的顺序

dmr*_*dmr 1 sql sql-server case sql-order-by

我试图通过外部select语句中的列使用case语句来确定要排序的字段.出于某种原因,我无法使用外部选择中创建的列.如果我尝试按该列排序而不使用case语句,那么它可以工作.我究竟做错了什么?

伪代码来说明问题:

DECLARE @orderBy varchar(8)
SET @orderBy = 'rating'

SELECT
    CASE
        WHEN rating is not null THEN 1
        ELSE  0
    END as hasRating,
    *
FROM

(SELECT col1, ...) AS table1

LEFT OUTER JOIN

(SELECT col1, rating, ...) AS table2

ON table1.col1 = table2.col2

--causes error "Invalid column name 'hasRating'"
ORDER BY 
    CASE WHEN @orderBy = 'rating' THEN hasRating END DESC,
    CASE WHEN @orderby = 'something else' THEN ...

--works
ORDER BY hasRating desc
Run Code Online (Sandbox Code Playgroud)

Har*_* CO 5

这会引发错误:

ORDER BY 
    CASE WHEN @orderBy = 'rating' THEN CASE WHEN rating is not null THEN 1 ELSE  0 END END DESC,
    CASE WHEN @orderby = 'something else' THEN ...
Run Code Online (Sandbox Code Playgroud)

似乎在别名可用之前评估CASEORDERby中的.