Cláusula HAVING (Microsoft Access SQL)

Se aplica a: Access 2013 | Access 2016

Especifica qué registros agrupados se muestran en una instrucción SELECT con una cláusula GROUP BY. Después de que GROUP BY combina los registros, HAVING muestra los registros agrupados por la cláusula GROUP BY que satisfacen las condiciones de la cláusula HAVING.

Sintaxis

SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist [HAVING groupcriteria ]

Una instrucción SELECT que contenga una cláusula HAVING consta de los siguientes elementos:

Parte Descripción
fieldlist Nombre del campo o campos que se recuperarán junto con los alias de nombre de campo, funciones de agregado de SQL, predicados de selección (ALL, DISTINCT, DISTINCTROW o TOP) u otras opciones de la instrucción SELECT.
table Nombre de la tabla en la que se recuperan los registros. Para obtener más información, vea la cláusula FROM.
selectcriteria Criterios de selección. Si la instrucción incluye una cláusula WHERE, el motor de base de datos de Microsoft Access agrupa los valores después de aplicar las condiciones WHERE a los registros.
groupfieldlist Nombres de 10 campos como máximo para agrupar los registros. El orden de los nombres de campo en listaDeCamposDeGrupo determina los niveles de agrupamiento desde el nivel superior al nivel inferior de agrupamiento.
groupcriteria Expresión que determina qué registros agrupados se deben mostrar.

Comentarios

HAVING es opcional.

HAVING es similar a WHERE, que determina qué registros se seleccionan. Después de que los registros se agrupan con GROUP BY, la cláusula HAVING determina qué registros se muestran:

SELECT CategoryID, 
Sum(UnitsInStock) 
FROM Products 
GROUP BY CategoryID 
HAVING Sum(UnitsInStock) > 100 And Like "BOS*";

Una cláusula HAVING puede contener hasta 40 expresiones vinculadas por operadores lógicos, como And y Or.

Ejemplo:

En este ejemplo, se seleccionan los cargos asignados a varios empleados en la región de Washington. Llama al procedimiento EnumFields, que se incluye en el ejemplo de la instrucción SELECT.

Sub HavingX() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Select the job titles assigned to more than one  
    ' employee in the Washington region.  
    Set rst = dbs.OpenRecordset("SELECT Title, " _ 
        & "Count(Title) as Total FROM Employees " _ 
        & "WHERE Region = 'WA' " _ 
        & "GROUP BY Title HAVING Count(Title) > 1;") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print recordset contents. 
    EnumFields rst, 25 
 
    dbs.Close 
 
End Sub 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.