我有一个表[CL-SO]和[CL-ProjExp]的主查询。对于[CL-SO]中的每条记录,我需要使用条件对来自[CL-ProjExp]的数据记录求和。我已经使用DSum和Dlookup函数正常工作了。但是,当有许多记录时,这会使数据库非常慢。以下是工作职能:
aMach_Hr: DSum("[Sum of Quantity]","[CL-ProjExp]","[SO]='" & [SO] & "' AND [Expenditure Type]='Shop Labor' AND [Expenditure Org]='1034 YR Machining'")
aDft_Hr: DLookUp("[Sum of Quantity]","[CL-ProjExp]","[SO]='" & [SO] & "' AND [Expenditure Org] = '2304 YR Drafting'")
为了使这个运行更快,我正在寻找用子查询替换这些函数。我提出了以下替代品:
AMach_Hr: (SELECT Sum([CL-ProjExp].[Sum of Quantity]) AS [SumOfSum of Quantity] FROM [CL-ProjExp] GROUP BY [CL-ProjExp].[Expenditure Type], [CL-ProjExp].[Expenditure Org], [CL-ProjExp].SO HAVING ((([CL-ProjExp].[Expenditure Type])="Shop Labor") AND (([CL-ProjExp].[Expenditure Org])="1034 YR Machining") AND (([CL-ProjExp].SO)=[CL-SO].[SO])))
aDft_Hr: (SELECT Sum([CL-ProjExp].[Sum of Quantity]) AS [SumOfSum of Quantity] FROM [CL-ProjExp] GROUP BY [CL-ProjExp].[Expenditure Org], [CL-ProjExp].[SO] HAVING ((([CL-ProjExp].[Expenditure Org])="2304 YR Drafting") AND (([CL-ProjExp].SO)=[CL-SO].[SO])))
然而,这给了我错误。看起来子查询不能使用主查询中的列数据,因为我可以使用这些函数。如何使用总查询和主查询中的数据使子查询正常工作?还是有一个更好的解决方案,我还没有遇到过?提前谢谢。
答案 0 :(得分:0)
使用常量条件创建并保存两个单独的查询,并在新查询中将它们与表连接。另外,我建议在聚合查询中使用WHERE
子句。 HAVING
速度较慢,在某些情况下可能会产生不同的结果。