table 中的子引用/报告生成以显示访问中的子引用

Sub references within a table / report generating to show sub references in access

我使用的是 Access 2010,我继承了包含培训科目的 table。其中一些科目是主要科目,一些是主要科目的子领域(都在同一个 table 中)。主要 table 由数字索引:

ID  |   Type    |   Department  |   Subject                         |   Sub 1   |   Sub 2   |   Sub 3
----+-----------+---------------+-----------------------------------+-----------+-----------+-----------
1   |   Main    |   Candy       |   Chocolate covered bananas       |   2       |   3       |   4
2   |   Sub     |   Candy       |   Melting Chocolate               |           |           |
3   |   Sub     |   Candy       |   Dipping machine                 |           |           |
4   |   Sub     |   Candy       |   Freezer Operation               |           |           |
5   |   Main    |   Candy       |   Chocolate covered Strawberries  |   2       |   3       |   

我正在尝试制作一份报告,该报告将显示主要主题,然后显示作为主要主题的子要求的所有内容。所以报告看起来像这样:

糖果部

巧克力香蕉
- 融化巧克力
- 浸胶机
- 冷冻操作
巧克力草莓
- 融化巧克力
- 浸胶机

等...

我不知道如何使关系或查找命令正确以获取正确的引用。我开始怀疑我必须将 table 分成两部分 - 一个用于主要科目,一个用于子要求。不过,这不是一个很好的选择,因为它有点大 table 并且链接到其他报告和查询。其中一些主题包含多达 10 个子区域(table 中的字段比我在这里指出的要多,但其中很多对于解决方案来说并不是真正必要的)

这可以通过编写 "Union" 查询来完成。

Select Access 中的 "SQL" 查看模式可以处理此类查询。

这里的目标是 "unpivot" 数据,以便每个子类型都有一个对主类型的引用。

SELECT  Table1.ID AS MainID
      , Table1.Department AS MainDepartment
      , Table1.Subject AS MainSubject
      , Table1_1.ID AS SubID
      , Table1_1.Department AS SubDepartment
      , Table1_1.Subject AS SubSubject
FROM    Table1
        INNER JOIN Table1 AS Table1_1 ON Table1.[Sub 1] = Table1_1.ID
UNION
SELECT  Table1.ID AS MainID
      , Table1.Department AS MainDepartment
      , Table1.Subject AS MainSubject
      , Table1_1.ID AS SubID
      , Table1_1.Department AS SubDepartment
      , Table1_1.Subject AS SubSubject
FROM    Table1
        INNER JOIN Table1 AS Table1_1 ON Table1.[Sub 2] = Table1_1.ID
UNION
SELECT  Table1.ID AS MainID
      , Table1.Department AS MainDepartment
      , Table1.Subject AS MainSubject
      , Table1_1.ID AS SubID
      , Table1_1.Department AS SubDepartment
      , Table1_1.Subject AS SubSubject
FROM    Table1
        INNER JOIN Table1 AS Table1_1 ON Table1.[Sub 3] = Table1_1.ID;

对于每个子类型,您的输出应该有 1 行。