您的查询不包含表达式“未结金额”作为聚合函数的一部分 - 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]&gt;'0' - 为什么不 [Open Amount]&gt; 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”的查询作为聚合函数的一部分

UNION 查询错误 - “您已尝试执行不包含指定表达式的查询...”

SQL点滴:分组查询并转出新表

选择列表中的无效表达式(不包含在聚合函数或 GROUP BY 子句中)