Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que não posso usar um alias para um agregado em uma cláusula de ter?


O HAVING cláusula é avaliada antes do SELECT - então o servidor ainda não sabe sobre esse alias.

  1. Primeiro, o produto de todas as tabelas no FROM cláusula é formada.

  2. O WHERE A cláusula é então avaliada para eliminar linhas que não satisfaçam a search_condition.

  3. Em seguida, as linhas são agrupadas usando as colunas no GROUP BY cláusula.

  4. Então, os grupos que não satisfazem a search_condition no HAVING cláusula são eliminadas.

  5. Em seguida, as expressões no SELECT lista de destino da instrução são avaliadas.

  6. Se o DISTINCT palavra-chave presente na cláusula select, as linhas duplicadas agora são eliminadas.

  7. A UNION é obtido após cada sub-seleção ser avaliada.

  8. Finalmente, as linhas resultantes são classificadas de acordo com as colunas especificadas no ORDER BY cláusula.

  9. TOP cláusula é executada.

espero que isso responda sua pergunta. Além disso, explica por que o alias funciona em ORDER BY cláusula.