sql >> Database teknologi >  >> RDS >> Sqlserver

Kan ikke bruge Alias-navn i WHERE-sætning, men kan i ORDER BY

Dette sker på grund af naturlig forespørgselsbehandlingsrækkefølge, som er følgende:

  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

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



  1. Valg af anden række i en tabel ved hjælp af rownum

  2. Manglende tabel over materialiseret udsigt

  3. Ti tips til at gå i produktion med PostgreSQL

  4. MySQL rækkefølge efter primær nøgle