Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum kann ich Alias ​​nicht in einer count(*)-Spalte verwenden und in einer Having-Klausel darauf verweisen?

Siehe das Dokument, auf das CodeByMoonlight in einer Antwort auf Ihre aktuelle Frage verweist.

Die HAVING-Klausel wird vor dem SELECT ausgewertet – der Server kennt diesen Alias ​​also noch nicht.

  1. Zunächst das Produkt aller Tabellen im von Klausel gebildet wird.
  2. Das wo -Klausel wird dann ausgewertet, um Zeilen zu eliminieren, die die Suchbedingung nicht erfüllen.
  3. Als Nächstes werden die Zeilen mithilfe der Spalten in Gruppieren nach gruppiert Klausel.
  4. Dann Gruppen, die die Suchbedingung in der havingclause nicht erfüllen werden eliminiert.
  5. Als nächstes die Ausdrücke in der Auswahl Klausel Zielliste ausgewertet.
  6. Falls die eindeutig Schlüsselwort in der select-Klausel vorhanden ist, werden doppelte Zeilen jetzt eliminiert.
  7. Die Gewerkschaft wird genommen, nachdem jede Unterauswahl ausgewertet wurde.
  8. Schließlich werden die resultierenden Zeilen nach den Spalten sortiert, die in der Ordnung nach angegeben sind Klausel.