Ini terjadi karena urutan pemrosesan kueri alami, yaitu sebagai berikut:
FROMONOUTERWHEREGROUP BYCUBE|ROLLUPHAVINGSELECTDISTINCTORDER BYTOP
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