Sql &引用;无效的列名";使用order by case语句和外部select进行查询时出错
我正在尝试使用case语句按外部select语句中的列排序,以确定排序依据的字段。由于某些原因,我无法使用在外部选择中创建的列。如果我尝试按该列排序,而不使用case语句,那么它是有效的。我做错了什么 用于说明问题的伪代码: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
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语句。