您的查询不包含表达式“未结金额”作为 aggerate 函数的一部分 - MS Access

问题描述

SELECT [doc type],[Open Amount],[customer number],COUNT([customer number]) As CountCustomerNumber,SUM(IIF([Open Amount]>'0',0)) AS sum_open_amount_pos,SUM(IIF([Open Amount]<'0',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],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],agg.[Open Amount]
      ) AS sub
GROUP  BY [doc type],[Open Amount]
HAVING COUNT([customer number]) = 1

在 Group BY 子句中添加了未结金额 - 为 agg.Open Amount 寻找参数值 ------------------------------ -----------

解决方法

请参阅以下 stackoverflow 帖子:“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

???

,

您选择了三个不属于任何聚合的元素,而在 group by 中只有两个元素,这就是您收到错误消息的原因。

当你使用聚合函数时,select 的所有非聚合元素都需要在 group by 中,因此你的查询变成这样:

编辑:您正在选择 [未结金额] 并在您的子查询中聚合 SUM(agg.[Open Amount]) AS SumOpenAmount。

您也在外部查询中做类似的事情

SELECT [doc type],[Open Amount],COUNT([customer number]) As CountCustomerNumber,SUM(IIF([Open Amount]>'0',0)) AS sum_open_amount_pos,SUM(IIF([Open Amount]<'0',0)) As sum_open_amount_neg         
FROM SubQueries
GROUP  BY [doc type]
          [Open Amount],[customer number]
HAVING COUNT([customer number]) = 1

应该是这样的:

SELECT [doc type],0)) As sum_open_amount_neg         
    FROM SubQueries
    GROUP  BY [doc type],[customer number]
    HAVING COUNT([customer number]) = 1
,

当您求和 [Open Amount]时,您不能同时选择每个单独的“未结金额”。因此,将其从“SELECT”和“GROUP BY”中删除:

SELECT [doc type] --,[customer number]
     --,0)) As sum_open_amount_neg         
FROM 
-- snip
GROUP  BY [doc type],[customer number]
        --,[Open Amount]
-- snip

同样,如果您按“客户编号”分组,Count([Customer Number]) 将返回 1(如果有效)。