MS Access Sql 查询不是聚合函数的一部分。使用计数功能

Posted

技术标签:

【中文标题】MS Access Sql 查询不是聚合函数的一部分。使用计数功能【英文标题】:MS Access Sql query not part of aggregate function. Using with Count function 【发布时间】:2015-11-30 02:45:10 【问题描述】:

我正在尝试在 Access 上执行此查询:

SELECT DISTINCT Phys.FName, 
Phys.LName, COUNT(*) AS NumberPatients
FROM Phys, Summary 
WHERE (((Summary.Phys_ID)=[Enter Physician Id]))
AND Phys.Phys_ID = Summary.Phys_ID;

但我收到此错误:

您尝试执行的查询不包含指定的 表达式“FName”作为聚合函数的一部分。 (错误 3122)

查询仅使用计数或仅使用不同的 FName/LName 即可正常工作。只有当我将它们结合起来时才会出现问题。

【问题讨论】:

你需要一个 GROUP BY Phys.FName, Phys.LName 【参考方案1】:

使用group by,而不是select distinct,以及明确的JOIN

SELECT Phys.FName, Phys.LName, COUNT(*) AS NumberPatients
FROM Phys INNER JOIN
     Summary 
     ON hys.Phys_ID = Summary.Phys_ID
WHERE Summary.Phys_ID = [Enter Physician Id]
GROUP BY Phys.FName, Phys.LName;

【讨论】:

【参考方案2】:

试试

SELECT DISTINCT Phys.FName, 
Phys.LName, COUNT(*) AS NumberPatients
FROM Phys, Summary 
WHERE (((Summary.Phys_ID)=[Enter Physician Id]))
AND Phys.Phys_ID = Summary.Phys_ID
Group by Phys.FName, Phys.LName

当您对其他列使用聚合函数时,您必须按这些列分组才能获得结果。更多信息请阅读documentation

【讨论】:

不客气 :) 接受任何一个答案。问候

以上是关于MS Access Sql 查询不是聚合函数的一部分。使用计数功能的主要内容,如果未能解决你的问题,请参考以下文章

MS Access/SQL 子查询的语法,包括聚合函数

Access Query + 您的查询不包含指定表达式“TimeID”作为聚合函数的一部分

MS Access SQL:聚合最小值但检索其他字段

Access 2010 SQL--在交叉表查询中按聚合函数对行进行排序

将 SQL Server 代码转换为 MS Access SQL 代码 - DISTINCT 问题 [重复]

在 MS Access 2007 中对 ODBC 表导入 sql 查询