SQL-MS Access多左连接查询出现表达式未包含错误问题求助
SQL聚合查询报错修复方案
错误根因
你遇到的报错属于SQL聚合查询的强制语法规则要求:当查询语句中使用了SUM()/COUNT()这类聚合函数时,所有出现在SELECT子句中、没有被聚合函数包裹的普通字段,必须全部加入GROUP BY子句作为分组依据。
你的查询中使用了Sum(B.[Amount ])做金额汇总,但A.Account_Num、A.Account_Name、C.Amount三个字段既没有被聚合函数包裹,也没有声明分组规则,因此触发报错。
前置确认项
需要先确认TB_Beg表的业务规则:如果每个账号(Account #字段)在TB_Beg表中仅有唯一一条期初余额记录,可直接将对应字段加入GROUP BY;如果同一个账号存在多条期初记录,需要对C.Amount也增加聚合规则(比如SUM(C.Amount)或MAX(C.Amount),根据实际业务需求选择)。
基础修复代码(默认TB_Beg单账号对应唯一期初记录)
SELECT A.Account_Num, A.Account_Name, NZ(Sum(B.[Amount ]),0) AS [Sum Of Amount], C.Amount AS [Beginning Balance] 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, C.Amount;
优化版代码(避免关联后数据膨胀,性能更稳定)
可以先单独对ModTD表做分组汇总,再关联另外两张表,避免ModTD多笔明细关联后导致TB_Beg的期初余额重复计算:
SELECT A.Account_Num, A.Account_Name, NZ(B.TotalAmount, 0) AS [Sum Of Amount], C.Amount AS [Beginning Balance] FROM ChartAccts AS A LEFT JOIN ( SELECT [Account (Line): Number ], SUM([Amount ]) AS TotalAmount FROM ModTD GROUP BY [Account (Line): Number ] ) AS B ON A.Account_Num = B.[Account (Line): Number ] LEFT JOIN TB_Beg AS C ON A.Account_Num = C.[Account #]
内容的提问来源于stack exchange,提问作者StunnedbymyStupidity
相关产品推荐
相关产品推荐

