2

我正在尝试构建一个查询(QueryB),以便在我的 MS 访问控制中引用它。我知道我的源表达式语法是正确的,我有一个与 QueryA 非常相似的工作控件。

我只更改了字段和查询名称。但是,我不断收到#Name?QueryB 的臭名昭著的错误。QueryA 和 QueryB 的区别在于 SQL 代码。QueryA 有一个GROUP BYandSUM()并且 QueryB 只有DATEDIFF(). 我尝试将 QueryB 添加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 之间的日期差异。

4

2 回答 2

0

[...执行查询不包括指定的表达式作为聚合函数的一部分]

该错误消息已经表明使用 GROUP BY 不适用于聚合函数。

DATEDIFF()是一个聚合函数,不适用于GROUP BY.

这样做的原因是GROUP BY减少了您的数据结果,并且您正在使用的列的每个不同条目仅显示一行。

无论如何,您对该查询的目标是什么?我相信这个问题有不同的解决方案。GROUP BY DATE.ID听起来您正在GROUP BY对无效的主键进行 a,因为主键在每个定义中都是唯一的。

于 2013-07-26T15:29:34.977 回答
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])

应该做的伎俩。

于 2013-07-26T16:49:47.393 回答