发生这种情况是由于自然的查询处理顺序,如下所示:
FROM
ON
OUTER
WHERe
GROUP BY
CUBE
|ROLLUP
HAVINg
SELECt
DISTINCT
ORDER BY
TOP
您要在
SELECT语句中分配别名。如您所见,它
WHERe是在处理之前
SELECT和
ORDERBY之后处理的。那就是原因。现在有什么解决方法:
- 子查询。但是它们可能很难阅读。
CROSS APPLY
。这应该稍微 美化 您的代码,这是推荐的方法。
CROSS APPLY将在
WHERe语句之前分配别名,使其在其中可用。
SELECT [Hotel Id] , latitude , longitude , establishmentname , DistanceFROM [dbo].[RPT_hotels]CROSS APPLY ( SELECT 6371 * ACos(Cos(RADIANS(Latitude)) * Cos(RADIANS('50.017466977673905')) * Cos(RADIANS('24.69924272460935') - RADIANS(Longitude)) + Sin(RADIANS(Latitude)) * Sin(RADIANS('50.017466977673905'))) ) AS T(Distance)WHERe distance < 30ORDER BY Distance;如果您想了解更多。请阅读以下问题:此SQL语句的执行顺序是什么



