Това се случва поради естествения ред на обработка на заявките, който е следният:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Присвоявате своя псевдоним в SELECT
изявление. Както можете да видите WHERE
се обработва преди SELECT
и ORDER BY
идва след него. Това е причината. Сега какви са заобиколните решения:
- Подзаявки. Но могат да бъдат трудни за четене.
CROSS APPLY
. Това трябва да разкраси вашия код малко и е препоръчителен метод.
CROSS APPLY
ще присвои псевдоним преди WHERE
израз, което го прави използваем в него.
SELECT [Hotel Id]
, latitude
, longitude
, establishmentname
, Distance
FROM [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 < 30
ORDER BY Distance;
Ако искате да разберете повече. Моля, прочетете този въпрос: Какъв е редът на изпълнение за този SQL израз