Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tidak dapat menggunakan nama Alias ​​​​dalam klausa WHERE tetapi dapat di ORDER BY

Ini terjadi karena urutan pemrosesan kueri alami, yaitu sebagai berikut:

  1. FROM
  2. ON
  3. OUTER
  4. WHERE
  5. GROUP BY
  6. CUBE | ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sisipkan Massal dengan parameter nama file

  2. Contoh sys.dm_sql_referenced_entities() SQL Server Mengembalikan Entitas yang Mereferensikan Server Tertaut

  3. Klausa ORDER BY tidak valid dalam tampilan, fungsi sebaris, tabel turunan, subkueri, dan ekspresi tabel umum

  4. Memesan hasil SQL Server dengan klausa IN

  5. Bagaimana cara memvalidasi poligon geografi di SQL server 2008?