Microsoft Access SQL) (HAVING 子句
适用于:Access 2013 | Access 2016
指定在使用 GROUP BY 子句的 SELECT 语句中显示哪些分组记录。 在 GROUP BY 组合记录后,HAVING 显示由 GROUP BY 子句分组的记录中满足 HAVING 子句条件的任何记录。
语法
SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist [HAVING groupcriteria ]
包含 HAVING 子句的 SELECT 语句具有以下部分:
Part | 说明 |
---|---|
fieldlist | 要检索的字段的名称,以及任何字段名别名、SQL 聚合函数、选择谓词(ALL、DISTINCT、DISTINCTROW 或 TOP)或其他 SELECT 语句选项。 |
table | 要从中检索记录的表的名称。 有关详细信息,请参阅 FROM 子句。 |
selectcriteria | 选择条件。 如果语句包含 WHERE 子句,那么 Microsoft Access 数据库引擎将在向记录应用 WHERE 条件后对值进行分组。 |
groupfieldlist | 最多 10 个用于分组记录的字段的名称。 在 groupfieldlist 中的字段名称的顺序确定了从最高到最低分组级别方法的分组级别。 |
groupcriteria | 一个表达式,确定要显示哪些分组记录。 |
备注
HAVING 是可选的。
HAVING 与 WHERE 相似,WHERE 确定哪些记录会被选中。 通过 GROUP BY 对记录分组后,HAVING 确定将显示哪些记录:
SELECT CategoryID,
Sum(UnitsInStock)
FROM Products
GROUP BY CategoryID
HAVING Sum(UnitsInStock) > 100 And Like "BOS*";
HAVING 子句最多可以包含通过逻辑运算符(如 And 和 Or)链接起来的 40 个表达式。
示例
以下示例选择由 Washington 地区的多个雇员担任的职务。 它调用 EnumFields 过程,您可以在 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
另请参阅
- 访问开发人员论坛
- 访问 support.office.com 上的帮助
- 访问 UtterAccess 上的论坛
- 访问开发人员和 VBA 编程帮助中心 (FMS)
- 访问 StackOverflow 上的帖子
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。