Saltar al contenido

SQL Server no “reconoce” el alias de COUNT

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.

  1. DESDE
  2. SOBRE
  3. ENTRAR
  4. DONDE
  5. AGRUPAR POR
  6. CON CUBO o CON ROLLUP
  7. TENIENDO
  8. SELECCIONE
  9. DISTINTO
  10. PEDIR POR
  11. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *