Dit gebeurt vanwege de natuurlijke volgorde voor het verwerken van zoekopdrachten, namelijk de volgende:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
Je wijst je alias toe in SELECT uitspraak. Zoals je kunt zien WHERE wordt verwerkt vóór SELECT en ORDER BY komt erachter. Dat is de reden. Wat zijn nu de oplossingen:
- Subquery's. Maar ze kunnen moeilijk te lezen zijn.
CROSS APPLY. Dit moet verfraaien uw code een beetje en is de aanbevolen methode.
CROSS APPLY zal een alias toewijzen vóór WHERE statement, waardoor het erin bruikbaar is.
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;
Als je meer wilt weten. Lees deze vraag: Wat is de volgorde van uitvoering van deze SQL-instructie