首页 文章

在报表上返回查询的第一个和最后一个结果的正确语法是什么?

提问于
浏览
-1

数据库链接2个表,父表中的主键 [OrderID] 链接到子表中的 [OrderIDFK] . 子表包含一个字段 [SerialNum] 以及其他详细信息(子表有自己的主键 [ProductsID] 这是一个序列号 . 我创建了一个名为 [Customers Query] 的查询,将两个表中的记录放在一起,我为ATF生成一页报告提交需要序列号 . 而不是像现在一样为查询中的每条记录创建1页报告(名为 "Form3" ),客户端希望在该字段中显示如"010001 - 010010"的范围 . 我的研究使我进入MIN和MAX以及FIRST和LAST参数,但是a)我不认为这是最好的,因为有些人说没有必要返回该范围的第一个和最后一个记录,并且b)我完全不知道如何写Access中的这个表达式 .

我假设逻辑将是这样的基本(非程序员)声明:

如果记录数等于1,则返回 SerialNum ,否则根据 ProductsID 字段中最小和最大编号值从第一个记录和最后一个记录返回 SerialNum .

我正在使用Access 2013,而且,我使用以下宏来进一步将查询过滤到表单上的按钮中的当前记录,以便仅显示报告中的那些记录:

DoCmd.OpenReport "Form 3", acViewPreview, , "OrderID = " & OrderId

1 回答

  • 1

    如果您按查询逐个查询,则可以添加两列,如以下屏幕截图所示:

    Example query in the designer

    或者,如果您更喜欢这里是示例SQL:

    SELECT Min(Products.SerialNum) AS MinOfSerialNum, Max(Products.SerialNum) AS MaxOfSerialNum
    FROM Products;
    

    Last和First选项将返回最后和第一个输入的值,这些值可能不是您想要的 .

    您还可以使用域聚合函数作为报表上文本框的控件源,如下所示:

    = DMax("[SerialNum]", "[Products]", "[OrderIDFK] = 1")
    

相关问题