Dit gebeurt vanwege de natuurlijke volgorde voor het verwerken van zoekopdrachten, namelijk de volgende:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
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