GROUP BY 句 (Microsoft Access SQL)
適用先: Access 2013 | Access 2016
指定したフィールド リストの中で同じ値を持つレコードを結合して 1 つのレコードにします。 SELECT ステートメントで、Sum 関数や Count 関数などの SQL 集計関数を使用すると、各レコードの集計値が得られます。
構文
SELECT フィールドリスト FROM テーブル WHERE criteria [GROUP BY groupfieldlist ]
GROUP BY 句を使用する SELECT ステートメントには、次の指定項目があります。
パーツ | 説明 |
---|---|
fieldlist | 取得する 1 つ以上のフィールドの名前。フィールド名の別名、SQL 集計関数、選択述語 (ALL、DISTINCT、DISTINCTROW、および TOP) などの SELECT ステートメント オプションも指定できます。 |
table | データを取得するテーブルの名前。 詳細については、「FROM 句」を参照してください。 |
criteria | 抽出条件。 ステートメントに WHERE 句が含まれている場合、Microsoft Access データベース エンジンは、WHERE 句の条件に従ってレコードを抽出した後に値をグループ化します。 |
groupfieldlist | レコードのグループ化に使用される最大 10 個のフィールドの名前。 グループフィールド リスト内のフィールド名の順序によって、グループ化レベルが最高レベルから最下位レベルのグループ化レベルに決定されます。 |
注釈
GROUP BY 句は省略可能です。
SELECT ステートメントで SQL 集計関数を指定していない場合、集計値は算出されません。
GROUP BY 句の中で指定したフィールドに Null 値がある場合、それらの Null 値も省略されずにグループ化されます。 ただし、Null 値は集計関数では評価されません。
WHERE 句を使用して、グループ化したくない行を除外し、 HAVING 句を使用してレコードがグループ化された後でフィルター処理します。
メモまたは OLE オブジェクト のデータが含まれていない限り、SELECT ステートメントに少なくとも 1 つの SQL 集計関数が含まれている場合、フィールドが SELECT ステートメントに含まれていない場合でも、GROUP BY フィールド リストのフィールドは FROM 句にリストされている任意のテーブル内の任意のフィールドを参照できます。 Microsoft® Jet データベース エンジンは、メモ フィールドまたは OLE オブジェクト フィールドでグループ化できません。
SELECT ステートメントのフィールド リストに指定したすべてのフィールドは、GROUP BY 句、または SQL 集計関数の引数のどちらかに指定する必要があります。
例
次の使用例では、役職名および各役職に該当する社員の数を示す一覧を作成します。 EnumFields プロシージャを呼び出しますが、このプロシージャについては、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
次の使用例では、各役職について、その役職に該当する社員のうち Washington で勤務している社員の数を計算します。
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
関連項目
- 開発者フォーラムにアクセスする
- support.office.com のヘルプにアクセスする
- UtterAccess のフォーラムにアクセスする
- 開発者と VBA のプログラミング ヘルプ センター (FMS) にアクセスする
- StackOverflow のアクセス ポスト
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示