Datediff&小组不工作?

时间:2013-07-26 15:09:24

标签: mysql sql ms-access group-by datediff

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

我只更改了字段和查询名称。但是我一直在使用QueryB获得臭名昭着的#Name?错误。 QueryA和QueryB之间的区别是SQL代码。 QueryA有GROUP BYSUM(),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之间的日期差异。

2 个答案:

答案 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])

应该做的伎俩。