【问题标题】:SQL-MS Access - Expression not included on multiple left join querySQL-MS Access - 多个左连接查询中不包含表达式
【发布时间】:2021-11-19 05:30:26
【问题描述】:

我最近开始了学习 SQL 的过程,并且遇到了我的第一堵墙。我的数据库中有三个表 - 科目表 (ChartAccts)、修改的交易明细 (ModTD) 和期初试算表 (TB_Beg)。我正在尝试创建一个查询,该查询显示科目表中的所有帐户及其名称、试算表中每个帐户的期初余额以及修改后的交易明细中的金额列。它们都通过每个表中的帐号链接。

我目前收到此“您的查询不包括指定的表达式 'Account_Num' 作为聚合函数的一部分。”尝试运行此代码时:

SELECT A.Account_Num, A.Account_Name, NZ(Sum(B.[Amount ]),0) AS [Sum Of Amount], C.Amount
FROM ((ChartAccts AS A)
LEFT JOIN ModTD AS B ON A.[Account_Num] = B.[Account (Line): Number ])
LEFT JOIN TB_Beg AS C ON A.[Account_Num] = C.[Account #];

我觉得我的问题一定与 ON 语句有关,但我已经开始这样做了很长时间,以至于我认为我不会确定问题,尽管它一定很简单。感谢任何/所有建议!

【问题讨论】:

  • 如果聚合一列(例如Sum(B.[Amount ])),则所有其他列都应显示在GROUP BY 子句中(您应包括在内)。
  • 哇——我觉得好傻。这正是我所缺少的。非常感谢!

标签: sql ms-access


【解决方案1】:

您缺少“GROUP BY”子句。当您使用 SQL 聚合函数(例如,Max()、Min()、Sum()、...)时,您必须在 GROUP BY 中包含所有不在 SQL 聚合函数的参数表达式中的字段条款。此外,您不能在聚合函数内部和外部使用相同的字段:不能同时聚合和不聚合。

我认为你想要的是:

SELECT A.Account_Num, A.Account_Name, NZ(Sum(B.[Amount ]),0) AS [Sum Of Amount]
FROM
     (    ChartAccts AS A
      LEFT JOIN 
          ModTD AS B 
      ON A.[Account_Num] = B.[Account (Line): Number ])
LEFT JOIN
     TB_Beg AS C 
ON A.[Account_Num] = C.[Account #]
GROUP BY A.Account_Num, A.Account_Name ;

您可能需要从可从LightningGuide.net 下载的示例数据库中检查查询“F_Select_w_group_by_agggreg”和相关的“F_Select_*”查询。

最后,小心使用 Nz() 函数,因为当从 SQL 调用时,它总是返回一个字符串。如果您将此代码片段用作较大查询的一部分,这可能会产生问题。您可能希望将 Nz() 函数包含在类型转换函数中,或者改用 Iif() 函数。

【讨论】:

  • "你不能同时聚合和聚合。" ——这是一个奇妙的解释。荣誉。
猜你喜欢
  • 2013-07-31
  • 2018-05-22
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多