Partager via


HAVING clause (Microsoft Access SQL)

S’applique à : Access 2013 | Access 2016

Spécifie quels enregistrements regroupés sont affichés dans une instruction SELECT avec une clause GROUP BY. Une fois que GROUP BY a regroupé les enregistrements, la clause HAVING affiche les enregistrements qui satisfont à ses conditions.

Syntaxe

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

Une instruction SELECT contenant une clause HAVING est composée des arguments suivants :

Élément Description
fieldlist Nom du ou des champs à extraire avec des alias, des fonctions d’agrégation SQL, des prédicats de sélection (ALL, DISTINCT, DISTINCTROW ou TOP) ou des options d’instruction SELECT.
table Nom de la table de laquelle des enregistrements sont extraits. Pour plus d’informations, voir la clause FROM.
selectcriteria Critère de sélection. Si l’instruction comporte une clause WHERE, le moteur de base de données Microsoft Access regroupe les valeurs après avoir appliqué les conditions WHERE aux enregistrements.
groupfieldlist Noms des champs (10 maximum) utilisés pour regrouper les enregistrements. L'ordre des noms des champs dans listechampsgroupe détermine les niveaux de regroupement du plus haut au plus bas.
groupcriteria Expression qui détermine les enregistrements regroupés à afficher.

Remarques

La clause HAVING est facultative.

HAVING est similaire à WHERE qui détermine quels enregistrements sont sélectionnés. Une fois que les enregistrements sont regroupés avec GROUP BY, HAVING détermine ceux à afficher :

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

Une clause HAVING peut contenir jusqu'à 40 expressions reliées par des opérateurs logiques, tels que And et Or.

Exemple

Dans cet exemple, les fonctions affectées à plusieurs employés dans la région de Washington sont sélectionnées. Il appelle la procédure EnumFields que vous pouvez trouver dans l’exemple d’instruction 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 

Voir aussi

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.