Estate atento porque en esta sección vas a encontrar el resultado que buscas.
Solución:
El SELECT
la cláusula se procesa lógicamente después de la HAVING
cláusula. Por lo tanto, los alias utilizados en SELECT
no existen (todavía) cuando el HAVING
se procesa la cláusula.
En MSDN puede mirar SELECT (Transact-SQL):
Orden de procesamiento lógico de la instrucción SELECT
Los siguientes pasos muestran el orden de procesamiento lógico, o el orden de enlace, para una instrucción SELECT. Este orden determina cuándo los objetos definidos en un paso se ponen a disposición de las cláusulas en los pasos posteriores. Por ejemplo, si el procesador de consultas puede enlazar (acceder) a las tablas o vistas definidas en la cláusula FROM, estos objetos y sus columnas estarán disponibles para todos los pasos posteriores. A la inversa, debido a que la cláusula SELECT es el paso 8, los alias de columna o las columnas derivadas definidas en esa cláusula no pueden ser referenciadas por cláusulas anteriores. Sin embargo, se pueden hacer referencia a ellos mediante cláusulas posteriores, como la cláusula ORDER BY. Tenga en cuenta que la ejecución física real de la declaración la determina el procesador de consultas y el orden puede variar de esta lista.
- DESDE
- SOBRE
- ENTRAR
- DONDE
- AGRUPAR POR
- CON CUBO o CON ROLLUP
- TENIENDO
- SELECCIONE
- DISTINTO
- PEDIR POR
- CIMA
Esta consulta funciona porque repite lo que luego se definirá (el COUNT
) en el SELECT
cláusula:
SELECT OrderID, COUNT(ProductID) products
FROM [NORTHWND].[dbo].[OrderDetails]
GROUP BY OrderID
HAVING COUNT(ProductID) > 5;
Porque el HAVING
se analiza antes de el alias se ha generado en el SELECT
lista. Esto se explica aquí con mucho detalle.
El único lugar donde puede usar un alias es en el ORDER BY
cláusula. Una solución es repetir la expresión en el HAVING
:
SELECT OrderID, COUNT(ProductID) AS Products
FROM Northwind.dbo.OrderDetails
GROUP BY OrderID
HAVING COUNT(ProductID) > 5;
Agradecemos que desees respaldar nuestro quehacer fijando un comentario o dejando una puntuación te damos las gracias.