MS Access VBA查询报错:子查询无法用于表达式,求解决方案
问题解决:Access SQL聚合函数中别名引用错误
错误原因
你的SQL语句报错是因为Access Jet SQL不允许在同一SELECT语句的聚合函数中直接引用SELECT列表里的别名(比如你定义的TOTAL)。别名是查询结果集生成后才会生效的,而聚合函数(如SUM)是在分组计算阶段执行的,此时别名还未定义,因此会触发该错误。
针对需求的两种修正方案
根据你的需求描述,分两种场景给出修正后的代码:
场景1:按每条记录判断计算后分组求和
如果需求是对每条记录,当该记录的QTD Venda大于对应QTD Min时,计算超出部分乘以Valor Bonif,再按Cod Col分组求和,同时返回组的QTD Venda总和:
fonteBD = "SELECT SUM([QTD Venda]) AS TOTAL, [Cod Col], [Colaborador], SUM(IIF([QTD Venda] > [QTD Min], ([QTD Venda] - [QTD Min]) * [Valor Bonif], 0)) AS RESULT FROM [venda] GROUP BY [Cod Col], [Colaborador] ORDER BY 1 DESC"
这里直接用原始字段QTD Venda替代别名TOTAL,针对每条记录做判断后再聚合求和。
场景2:按分组总销量判断计算
如果需求是按Cod Col分组后,若组的总QTD Venda(TOTAL)大于该组的QTD Min(假设同一Cod Col的QTD Min和Valor Bonif为固定值),计算总超出量乘以Valor Bonif作为RESULT:
fonteBD = "SELECT sub.TOTAL, sub.[Cod Col], sub.[Colaborador], IIF(sub.TOTAL > sub.[QTD Min], (sub.TOTAL - sub.[QTD Min]) * sub.[Valor Bonif], 0) AS RESULT FROM (SELECT SUM([QTD Venda]) AS TOTAL, [Cod Col], [Colaborador], MAX([QTD Min]) AS [QTD Min], MAX([Valor Bonif]) AS [Valor Bonif] FROM [venda] GROUP BY [Cod Col], [Colaborador]) AS sub ORDER BY sub.TOTAL DESC"
这里通过子查询先计算出每个分组的总销量、QTD Min和Valor Bonif,再在外层查询中使用别名TOTAL进行判断计算。
内容的提问来源于stack exchange,提问作者Lucas Portela
相关产品推荐
相关产品推荐

