Dette sker på grund af naturlig forespørgselsbehandlingsrækkefølge, som er følgende:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
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