如何进行查询,将实体及其子实体的数据聚合到最低级别?
我有两张桌子。
第一个是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,但有一些问题: