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 子句最多可以包含通过逻辑运算符(如 AndOr)链接起来的 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 

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。