Dies geschieht aufgrund der natürlichen Abfrageverarbeitungsreihenfolge, die wie folgt lautet:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Sie weisen Ihren Alias in SELECT
zu Aussage. Wie Sie WHERE
sehen können wird vor SELECT
verarbeitet und ORDER BY
kommt danach. Das ist der Grund. Was sind nun die Problemumgehungen:
- Unterabfragen. Aber sie können schwer zu lesen sein.
CROSS APPLY
. Das soll verschönern Ihr Code ein bisschen und ist empfohlene Methode.
CROSS APPLY
wird einen Alias vor WHERE
zuweisen -Anweisung, um sie darin verwendbar zu machen.
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;
Wenn Sie mehr erfahren möchten. Bitte lesen Sie diese Frage: In welcher Reihenfolge wird diese SQL-Anweisung ausgeführt