Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;无效的列名";使用order by case语句和外部select进行查询时出错_Sql_Sql Server_Sql Order By_Case - Fatal编程技术网

Sql &引用;无效的列名";使用order by case语句和外部select进行查询时出错

Sql &引用;无效的列名";使用order by case语句和外部select进行查询时出错,sql,sql-server,sql-order-by,case,Sql,Sql Server,Sql Order By,Case,我正在尝试使用case语句按外部select语句中的列排序,以确定排序依据的字段。由于某些原因,我无法使用在外部选择中创建的列。如果我尝试按该列排序,而不使用case语句,那么它是有效的。我做错了什么 用于说明问题的伪代码: DECLARE @orderBy varchar(8) SET @orderBy = 'rating' SELECT CASE WHEN rating is not null THEN 1 ELSE 0 END as ha

我正在尝试使用case语句按外部select语句中的列排序,以确定排序依据的字段。由于某些原因,我无法使用在外部选择中创建的列。如果我尝试按该列排序,而不使用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

这是否会引发错误:

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 ...

似乎是在别名可用之前对
顺序中的
案例
进行了计算。

这是否会引发错误:

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 ...

似乎在别名可用之前,
顺序
中的
大小写

是否也可以包含错误?@DavidStarkey:正如我在代码注释中所写,错误为“无效列名'hasRating'”。是否也可以包含错误?@DavidStarkey:正如我在代码注释中所写,错误为“无效的列名'HasReal'”“您可能还想考虑在排序之前多推结果1,这样您就可以使用您创建的别名而不是重复case语句。您可能还想考虑在定单之前再多推1次结果,这样您就可以使用您创建的别名而不是重复CASE语句。