按 ID 对多级分组访问报告进行排序

Posted

技术标签:

【中文标题】按 ID 对多级分组访问报告进行排序【英文标题】:Sort multi level grouped Access report by ID 【发布时间】:2021-02-03 12:22:25 【问题描述】:

我有一个按 3 个字段(字段 1、字段 2 和字段 3)分组的报告,我尝试按记录 ID 以不同方式对其进行排序但失败了。

下面是一个简单的例子:

ID Field1 Field2 Field3 Field4
1 Y AA MM Item1
2 Z AA PP Item2
3 Z BB NN Item3
4 Z BB MM Item4
5 Z AA DD Item5
6 A AA CC Item6
7 A BB DD Item7
8 A BB MM Item8
9 A BB CC Item9

目标结果: 我希望分组的项目按 ID 排序;

字段1:

因为“Y”组 ID 为 1,所以它必须先出现,然后是“Z”组,然后是“A”组。

所有组以此类推。

几周前我在一个论坛上找到了一个解决方案(不记得在哪里),但昨天我测试它时,它在排序时出错了。

该解决方案使用查询来查找每个组名的相关 ID,然后使用这些排序器(我称之为 Sorter1、2、3)对报告进行分组(我将其合并到附加的访问示例中)

Sorter1: CInt(DMin("ID","[Master]","Field1='" & [Field1] & "'"))
Sorter2: CInt(DMin("ID","[Master]","Field2='" & [Field2] & "'"))
Sorter3: CInt(DMin("ID","[Master]","Field3='" & [Field3] & "'"))

它会减慢对大量数据的查询,但会给出完美的结果,除非 field3 中的项目在许多其他组中重复,如图所示。

Sample Access 我想我需要将 field3 的“Dmin”函数限制为仅那些 ID 大于 Sorter2 的值(我尝试过但失败了)。

【问题讨论】:

如果您不将分组数据放入相应的组部分,为什么还要分组?在 SortBy 属性或 Sorting & Grouping 中删除分组并应用排序顺序。 我投票结束这个问题,因为这是一个报告设计问题,而不是代码问题。需要下载并查看文件以分析问题。 其实在这样的报告中分组是需要这3个级别的,原来的报告是按Category, Class & Work Type分组的工程报告。但我需要以 ID 排序显示报告的详细信息,而不是按 3 级字母排序。 我不确定您所说的按 id 排序的分组项目是什么意思。字段 2 和字段 3 怎么样?我们需要一张想要的结果的图片。在字里行间阅读我开始认为您可能正在寻找交叉表。 如果您想按这 3 个级别进行分组,则不能按 ID 进行整体排序。它确实按第三组中的 ID 排序。如果您希望 ID 在字段 1 下排序,则不能对字段 2 和 3 进行分组。正如@mazoula 所说,编辑问题以说明您想要实现的目标。 【参考方案1】:

似乎 sort1 用于按 Field1 中包含的最低 ID 对 field1 进行排序,对于 sort2 和 sort3 以此类推。在这一点上,似乎按 ID 或 Field4 排序在按 field3 排序之前,所以在 sort3 之前按 id 排序。

报告记录来源:

报告设计:

报告输出:

【讨论】:

很遗憾,“Field4”与“ID”无关(我用相同的ID命名以表明它没有排序)。 “Field4”&子序列字段可以是真实数据表中的任意数据。 使用生成表查询将查询及其计算字段转换为表可能要快得多。然后按 ID 而不是 field4 运行解决方案过滤。 我找到了这种延迟的解决方案,我创建了一个仅包含“Ser”和要排序的字段(sorter1,2,3)的查询,然后通过“Ser”将其与主查询链接 【参考方案2】:

正如我所想,我发现我必须将 Sorter2 和 Sorter3 限制如下:

Sorter2: CInt(DMin("ID","[Master]","Field2='" & [Field2] & "'And ID >=" _
& DMin("ID","[Master]","Field1='" & [Field1] & "'")))

Sorter3: CInt(DMin("ID","[Master]",("Field3='" & [Field3] & "' And ID >=" _
& DMin("ID","[Master]","Field2='" & [Field2] & "'And ID >=" _
& DMin("ID","[Master]","Field1='" & [Field1] & "'")))))

感谢您的助手。

【讨论】:

以上是关于按 ID 对多级分组访问报告进行排序的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 按字符串开头对访问报告进行排序

访问:按来自不同来源的日期排序

MS 访问报告

C#按以下值对排序列表进行分组

按首字母 Javascript 按字母顺序对对象进行排序和分组

Mongodb:按元素分组并根据条件显示子文档计数并按日期对文档进行排序