Detta händer på grund av naturlig frågebehandlingsordning, som är följande:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
Du tilldelar ditt alias i SELECT påstående. Som du kan se WHERE bearbetas före SELECT och ORDER BY kommer efter det. Det är anledningen. Vad är nu lösningarna:
- Undersökningar. Men de kan vara svåra att läsa.
CROSS APPLY. Detta bör försköna din kod lite och rekommenderas metod.
CROSS APPLY kommer att tilldela alias före WHERE uttalande, vilket gör det användbart i det.
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;
Om du vill veta mer. Läs den här frågan: Vilken är exekveringsordningen för denna SQL-sats