Ini terjadi karena urutan pemrosesan kueri alami, yaitu sebagai berikut:
FROM
ON
OUTER
WHERE
GROUP BY
CUBE
|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Anda menetapkan alias Anda di SELECT
penyataan. Seperti yang Anda lihat WHERE
diproses sebelum SELECT
dan ORDER BY
datang setelah itu. Itulah alasannya. Sekarang apa solusinya:
- Subkueri. Tapi bisa jadi sulit dibaca.
CROSS APPLY
. Ini seharusnya mempercantik kode Anda sedikit dan metode yang disarankan.
CROSS APPLY
akan menetapkan alias sebelum WHERE
pernyataan, membuatnya dapat digunakan di dalamnya.
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;
Jika Anda ingin mengetahui lebih lanjut. Silakan baca pertanyaan ini: Apa urutan eksekusi untuk pernyataan SQL ini