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

Perché non posso usare l'alias in una colonna count(*) e farvi riferimento in una clausola have?

Vedi il documento a cui fa riferimento CodeByMoonlight in una risposta alla tua recente domanda.

La clausola HAVING viene valutata prima di SELECT, quindi il server non conosce ancora quell'alias.

  1. Prima il prodotto di tutte le tabelle nel da si forma la clausola.
  2. Il dove La clausola viene quindi valutata per eliminare le righe che non soddisfano la condizione_ricerca.
  3. Successivamente, le righe vengono raggruppate utilizzando le colonne nel raggruppa per clausola.
  4. Quindi, i Gruppi che non soddisfano la search_condition nella clausola di prova vengono eliminati.
  5. Successivamente, le espressioni nella selezione l'elenco di destinazione delle clausole viene valutato.
  6. Se il distinto parola chiave presente nella clausola select, le righe duplicate sono ora eliminate.
  7. Il sindacato viene presa dopo che ogni sottoselezione è stata valutata.
  8. Infine, le righe risultanti vengono ordinate in base alle colonne specificate nell'ordine per clausola.