我正在尝试构建一个查询(QueryB),以便在我的MS Access控件中引用它。我知道我的源表达式语法正确,我对QueryA有一个非常相似的工作控制。
我只更改了字段和查询名称。但是我一直在使用QueryB获得臭名昭着的#Name?
错误。 QueryA和QueryB之间的区别是SQL代码。 QueryA有GROUP BY
和SUM()
,QueryB只有DATEDIFF()
。我已经尝试将GROUP BY
添加到QueryB,但不断获取[...执行查询不包括指定的表达式作为聚合函数的一部分]。
查询B:
SELECT IIF(DATEDIFF("d",Date_X,Date_Y)>100),
ROUND(IIF(DATEDIFF("d",Date_X,Date_Y)/30,2),
DATEDIFF("d",Date_X,Date_Y)
AS DATEDIFF_X_Y
FROM LAB_DATES GROUP BY LAB_DATES.ID;
这是在MS Access SQL中。
在MS Access中引用QueryB的ControlB源:
=DLookUp("[DATE_DIFF_X_Y]",
"[QueryB]",
"[LAB_DATES.ID] = " & [Forms]![Lab Results Form]![Textbox_DATE_ID])
取出GROUP BY
时,此查询运行正常但我在控件中出现#Name?
错误。所有数据均来自ODBC MySQL。访问是前端。
修改:我可以放弃GROUP BY
。但我会得到#Name?
错误。我的目标是显示Date_X和Date_Y之间的日期差异。
答案 0 :(得分:0)
[...执行查询不包括指定的表达式作为部分 集合函数]
该错误消息已指示使用GROUP BY不能使用聚合函数。
DATEDIFF()
是一个聚合函数,不适用于GROUP BY
。
原因是GROUP BY
减少了您的数据结果,并且只显示您正在使用的列的每个不同条目的一行。
无论如何,您对该查询的目标是什么?我确信这个问题有不同的解决方法。 GROUP BY DATE.ID
听起来像是在主键上发出GROUP BY
而没有效果,因为主键在每个定义中都是唯一的。
答案 1 :(得分:0)
我认为您的问题在DLookup
而不是您的查询范围内。您根本不需要GROUP BY
,这会导致查询出错,您可以简单地创建QueryB:
SELECT IIF(DATEDIFF("d",Date_X,Date_Y)>100),
ROUND(IIF(DATEDIFF("d",Date_X,Date_Y)/30,2),
DATEDIFF("d",Date_X,Date_Y) AS DATEDIFF_X_Y
FROM LAB_DATES;
问题在于您正在使用的DLookup
:
[LAB_DATES.ID]
你真正想要的地方
[LAB_DATES].[ID]
即。在它的当前表单中,您正在查找名为LAB_DATES.ID
的列,而不是对象ID
中名为LAB_DATES
的列。将DLookup
更改为此:
=DLookUp("[DATE_DIFF_X_Y]",
"[QueryB]",
"[LAB_DATES].[ID] = " & [Forms]![Lab Results Form]![Textbox_DATE_ID])
应该做的伎俩。