Share via


GROUP BY clause (Microsoft Access SQL)

S’applique à : Access 2013 | Access 2016

Combine des enregistrements, avec des valeurs identiques dans la liste de champs spécifiés, en un seul enregistrement. Une valeur de synthèse est créée pour chaque enregistrement si vous incluez une fonction d’agrégation SQL, telle que Sum ou Count, dans l’instruction SELECT.

Syntaxe

SELECT fieldlist FROM table WHERE criteria [GROUP BY groupfieldlist ]

Une instruction SELECT contenant une clause GROUP BY 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.
criteria 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.

Remarques

La clause GROUP BY est facultative.

Les valeurs de synthèse sont omises s'il n'y a aucune fonction d'agrégation SQL dans l'instruction SELECT.

Les valeurs Null dans les champs GROUP BY sont regroupées et ne sont pas omises. Cependant, les valeurs Null ne sont pas évaluées dans une fonction d'agrégation SQL.

Utilisez la clause WHERE pour exclure les lignes que vous ne souhaitez pas regrouper, et utilisez la clause HAVING pour filtrer les enregistrements une fois qu’ils ont été regroupés.

Sauf s'il contient des données de type Mémo ou Objet OLE, un champ de la liste de champs GROUP BY peut faire référence à un champ d'une table indiquée dans la clause FROM, même si le champ n'est pas inclus dans l'instruction SELECT, à condition que l'instruction SELECT comprenne au moins une fonction d'agrégation SQL. Le moteur de base de données Microsoft® Jet ne peut pas regrouper les données à partir des champs de type Mémo ou Objet OLE.

Tous les champs dans la liste de champs SELECT doivent être inclus dans la clause GROUP BY ou être inclus en tant qu'arguments dans une fonction d'agrégation SQL.

Exemple

Dans cet exemple, une liste des fonctions et du nombre d'employés par fonction est créée. Il appelle la procédure EnumFields que vous pouvez trouver dans l’exemple d’instruction SELECT.

Sub GroupByX1() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' For each title, count the number of employees  
    ' with that title.  
    Set rst = dbs.OpenRecordset("SELECT Title, " _ 
        & "Count([Title]) AS Tally " _ 
        & "FROM Employees GROUP BY Title;") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    EnumFields rst, 25 
 
    dbs.Close 
 
End Sub 

Dans cet exemple, le nombre d'employés à Washington est calculé pour chaque fonction.

Sub GroupByX2() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
     
    ' For each title, count the number of employees  
    ' with that title. Only include employees in the  
    ' Washington region. 
    Set rst = dbs.OpenRecordset("SELECT Title, " _ 
        & "Count(Title) AS Tally " _ 
        & "FROM Employees WHERE Region = 'WA' " _ 
        & "GROUP BY Title;") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
 
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    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.