查询父子实体数据累计数量

问题描述 投票:0回答:0

如何进行查询,将实体及其子实体的数据聚合到最低级别?

我有两张桌子。

第一个是tblEntity,一个有实体和父实体关系的自联表:

tbl实体

实体ID 实体 PrntEntID
1 A
2 B 1
3 C 1
4 D 2
5 E 4
6 F 4

第二个相关表是 tblEntWdg,分配给具有小部件数量的实体的小部件列表:

tblEntWdg

EntWdgID 实体ID 小工具 数量
1 5 小部件1 1
2 5 小部件2 5
3 5 小部件3 2
4 6 小部件1 1
5 6 小部件2 5
6 6 小部件3 2
7 4 小部件4 1
8 3 小部件5 5
9 2 小部件6 2

我想进行一个查询,将每个实体及其子实体的小部件的累积数量聚合到最低级别。下面是一个例子:

qryEntWdgSum

实体ID 小部件 数量
1 小部件1 2
1 小部件2 10
1 小部件3 4
1 小部件4 1
1 小部件5 2
1 小部件6 7
2 小部件1 2
2 小部件2 10
2 小部件3 4
2 小部件4 1
2 小部件6 7
3 小部件5 2
4 小部件1 2
4 小部件2 10
4 小部件3 4
4 小部件4 1
5 小部件1 1
5 小部件2 5
5 小部件3 2
6 小部件1 1
6 小部件2 5
6 小部件3 2

我当前的解决方案是创建一个 SELECT 查询来确定最高曾曾祖父母的实体级别。

qryEntLvl

实体ID 家长ID GrndPrntID GrtGrndPrntID GrtGrtGrndPrntID
1
2 1
3 1
4 2 1
5 4 2 1
6 4 2 1

然后,我在基于 tblEntWdg 的 UNION 查询中使用上述查询,并使用每个字段作为 UNION 查询中每个 SELECT 查询的 EntityID 字段。在第二个单独的 SELECT 查询中,我必须对 EntityID 和 Widget 字段进行分组,并对数量进行求和以合并重复项。

最终结果类似于上面的 qryEntWdgSum,但有一些问题:

  1. 我的层次结构有五级限制 - 我想要一个可以处理任意数量级别的解决方案
  2. 这一切看起来效率很低 - 我的直觉告诉我,我可以使用 VBA 递归,而不必求助于 qryEntLvl 查询,并可能避免 UNION 查询,但我不知道如何继续。
  3. 我在某些表单上遇到运行时错误,我相信是因为除了上面提到的表和查询之外,我还加入了其他表和查询,因此内存不足 - 作为一种解决方法,我将数据附加到临时表中,这似乎也效率低下。
ms-access aggregate parent-child self-join
© www.soinside.com 2019 - 2024. All rights reserved.