Dette sker på grund af naturlig forespørgselsbehandlingsrækkefølge, som er følgende:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
Du tildeler dit alias i SELECT udmelding. Som du kan se WHERE behandles før SELECT og ORDER BY kommer efter det. Det er grunden. Hvad er nu løsningerne:
- Underforespørgsler. Men de kan være svære at læse.
CROSS APPLY. Dette bør forskønne din kode lidt og er anbefalet metode.
CROSS APPLY vil tildele alias før WHERE erklæring, hvilket gør det brugbart 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;
Hvis du vil finde ud af mere. Læs venligst dette spørgsmål: Hvad er rækkefølgen for udførelse af denne SQL-sætning