访问更新查询:查询不包含指定表达式作为聚合函数的一部分
Posted
技术标签:
【中文标题】访问更新查询:查询不包含指定表达式作为聚合函数的一部分【英文标题】:Access Update Query: Query does not include the specified expression as part of an aggregate function 【发布时间】:2018-10-19 06:58:39 【问题描述】:我正在尝试执行以下操作: 1. 将 Ride 表中每个司机取消的计数 (IsCancelled = "Y") 放入 Driver 表中,以跟踪每个司机取消了多少次。 2. 将每个司机的平均评分输入到 Driver 表中 - 这是从 Ride 表中该特定司机的所有 DriverRating 的平均值得出的。
UPDATE Driver
INNER JOIN ((Car
INNER JOIN CarTypeAssignment ON Car.LicensePlateNo = CarTypeAssignment.LicensePlateNo)
INNER JOIN Ride ON CarTypeAssignment.CarTypeAssignmentID = Ride.CarTypeAssignmentID)
ON Driver.DriverLicenseNo = Car.DriverLicenseNo
SET Driver.DriverCancellation = Count([Ride].[IsCancelled]), Driver.DriverRating = Avg([Ride].[DriverRating]);
我尝试在 Microsoft Access 中执行上述 SQL 代码,但收到以下错误消息:
您的查询不包含作为聚合函数的一部分的指定表达式“Driver Cancellation”。
*附注我无法附上我的表格的图片,所以请忽略代码的 INNER JOIN 部分 - 它应该是正确的。
【问题讨论】:
保存计算数据通常是不必要的,而且可能很危险,尤其是聚合数据。保存的数据可能与原始数据“不同步”。如果您可以计算 UPDATE 的值,则可以在需要时进行计算。 Access 甚至不允许在聚合 (GROUP BY) 查询中使用聚合函数(Sum、Count 等)的 UPDATE 操作 SQL。 【参考方案1】:UPDATE
不支持聚合。您需要使用子查询。
UPDATE Driver d INNER JOIN
(SELECT DriverLicenseNo,
Count([Ride].IsCancelled) as cnt,
Avg([Ride].[DriverRating]) as avg_rating
FROM (Car as c INNER JOIN
CarTypeAssignment as cta
ON c.LicensePlateNo = cta.LicensePlateNo
) INNER JOIN
Ride as r
ON cta.CarTypeAssignmentID = r.CarTypeAssignmentID
) as c
ON d.DriverLicenseNo = c.DriverLicenseNo
SET d.DriverCancellation = cnt,
d.DriverRating = avg_rating;
【讨论】:
以上是关于访问更新查询:查询不包含指定表达式作为聚合函数的一部分的主要内容,如果未能解决你的问题,请参考以下文章
我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过?
尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分
您的查询不包含表达式“未结金额”作为聚合函数的一部分 - MS Access
UNION 查询错误 - “您已尝试执行不包含指定表达式的查询...”