Dies geschieht aufgrund der natürlichen Abfrageverarbeitungsreihenfolge, die wie folgt lautet:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
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