您的查询不包含表达式“未结金额”作为聚合函数的一部分 - MS Access
Posted
技术标签:
【中文标题】您的查询不包含表达式“未结金额”作为聚合函数的一部分 - MS Access【英文标题】:Your Query does not include the expression 'Open Amount' as part of an aggerate function - MS Access 【发布时间】:2021-06-10 07:07:47 【问题描述】:SELECT [doc type], [Open Amount]
, [customer number]
, COUNT([customer number]) As CountCustomerNumber
, SUM(IIF([Open Amount]>'0', [Open Amount], 0)) AS sum_open_amount_pos
, SUM(IIF([Open Amount]<'0', [Open Amount], 0)) As sum_open_amount_neg
FROM
(SELECT d.[customer number] & d.[membership number] AS CustMemb
, d.[customer number]
, agg.[Open Amount]
, agg.[doc type]
, SUM(agg.[Open Amount]) AS SumOpenAmount
FROM (SELECT [doc type]
, [customer number]
, SUM([Open Amount]) AS TotalSubOpenAmount
FROM data
WHERE [doc type] = 'RU'
GROUP BY [doc type]
, [customer number]
) agg
INNER JOIN [data] d
ON d.[customer number] = agg.[customer number]
GROUP BY d.[customer number] & d.[membership number]
, d.[customer number]
, agg.[doc type]
, agg.[Open Amount]
) AS sub
GROUP BY [doc type]
, [customer number]
, [Open Amount]
HAVING COUNT([customer number]) = 1
将未结金额添加到 Group BY 子句 - 寻找 agg.Open Amount 的参数值 ------------------------------ ------------
【问题讨论】:
在您的子选择中,您对[Open Amount]
求和,但忽略该结果并在外部查询中再次对“未结金额”求和。您想对总和子结果求和吗?
不,我只是想为每个客户编号返回这两个结果: , SUM(IIF([Open Amount]>'0', [Open Amount], 0)) AS sum_open_amount_pos , SUM (IIF([Open Amount]
Nitpick: [Open Amount]>'0'
- 为什么不 [Open Amount]> 0
(0 应该是一个数值,而不是字符串)
谢谢 - 没错
【参考方案1】:
请参阅以下 *** 帖子:“You tried to execute a query that does not include the specified aggregate function”。我想你只需要将[Open Amount]
添加到最后的GROUP BY
.
.
.
GROUP BY [doc type]
, [customer number]
, [Open Amount]
HAVING COUNT([customer number]) = 1
???
【讨论】:
【参考方案2】:您选择的三个元素不属于任何聚合,但您的 group by 只有两个元素,这就是您收到错误消息的原因。
当您使用聚合函数时,选择的所有非聚合元素都需要在组中,因此您的查询变成这样:
编辑:您在子查询中选择 [Open Amount] 并聚合 SUM(agg.[Open Amount]) AS SumOpenAmount。
你也在你的外部查询中做类似的事情
SELECT [doc type], [Open Amount]
, [customer number]
, COUNT([customer number]) As CountCustomerNumber
, SUM(IIF([Open Amount]>'0', [Open Amount], 0)) AS sum_open_amount_pos
, SUM(IIF([Open Amount]<'0', [Open Amount], 0)) As sum_open_amount_neg
FROM SubQueries
GROUP BY [doc type]
[Open Amount]
, [customer number]
HAVING COUNT([customer number]) = 1
应该是这样的:
SELECT [doc type]
, [customer number]
, COUNT([customer number]) As CountCustomerNumber
, SUM(IIF([Open Amount]>'0', [Open Amount], 0)) AS sum_open_amount_pos
, SUM(IIF([Open Amount]<'0', [Open Amount], 0)) As sum_open_amount_neg
FROM SubQueries
GROUP BY [doc type]
, [customer number]
HAVING COUNT([customer number]) = 1
【讨论】:
在您最下方的子选择中,您尝试按 [Open Amount] 分组,但这是在您选择的聚合函数中 谢谢。已编辑。然而,仍然支持相同的参数查询 在上述查询中,您选择 agg.[Open Amount] 以及 SUM(agg.[Open Amount]) AS SumOpenAmount 相应地编辑帖子【参考方案3】:当您合计 [Open Amount]
时,您不能同时选择每个单独的“未结金额”。所以从“SELECT”和“GROUP BY”中删除它:
SELECT [doc type] --, [Open Amount]
, [customer number]
--, COUNT([customer number]) As CountCustomerNumber
, SUM(IIF([Open Amount]>'0', [Open Amount], 0)) AS sum_open_amount_pos
, SUM(IIF([Open Amount]<'0', [Open Amount], 0)) As sum_open_amount_neg
FROM
-- snip
GROUP BY [doc type]
, [customer number]
-- , [Open Amount]
-- snip
同样,如果您按“客户编号”分组,Count([Customer Number])
将返回 1(如果有效)。
【讨论】:
以上是关于您的查询不包含表达式“未结金额”作为聚合函数的一部分 - MS Access的主要内容,如果未能解决你的问题,请参考以下文章
我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过?
尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分