生成表/报告中的子引用以显示访问中的子引用
Posted
技术标签:
【中文标题】生成表/报告中的子引用以显示访问中的子引用【英文标题】:Sub references within a table / report generating to show sub references in access 【发布时间】:2015-04-15 11:40:20 【问题描述】:我使用的是 Access 2010,并且我继承了一个包含培训主题的表。其中一些科目是主要科目,有些是主要科目的子领域(都在同一张表中)。主表按编号索引:
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 |
我正在尝试制作一份报告,该报告将显示主要主题,然后是主要主题的子要求的所有内容。所以报告看起来像这样:
糖果部
巧克力香蕉 - 融化巧克力 - 浸胶机 - 冷冻操作巧克力草莓 - 融化巧克力 - 浸胶机
等等……
我不知道如何正确获取关系或查找命令以获取正确的引用。我开始怀疑我必须将表格分成两份 - 一份用于主要科目,一份用于子要求。但是,这不是一个很好的选择,因为它有点大,并且链接到其他报告和查询。其中一些主题包含多达 10 个子区域(表中的字段比我在此处指出的要多,但其中很多对于解决方案来说并不是真正必要的)
【问题讨论】:
拆分表格似乎是个好主意,就像我讨厌说的那样(因为这听起来需要做很多工作) 欢迎来到 Stack Overflow。 Sub 1 到 3 字段名称中的数字是否有任何含义? Sub 1 = 2 和 Sub 2 = 3 的含义是否与 Sub 1 = 3 和 Sub 2 = 2 不同? @HansUp - 谢谢!子字段中的数字只是指示它们包含在主字段中的子级别培训的 ID 的指针。所以 Sub 1 = 3 意味着 Dipping Machine 训练是主训练的一个子组件。 再次感谢所有人 - 包括编辑我的原始帖子以使其看起来像它应该的那样的好人。下面 Josh 的解决方案成功了。 【参考方案1】:这可以通过编写“联合”查询来完成。
在 Access 中选择“SQL”视图模式以处理此类查询。
这里的目标是“反透视”数据,以便每个子类型都有对主类型的引用。
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 行。
【讨论】:
谢谢 - 这看起来可行,我很想尝试一下。我有 10 个子主题,而且我是这方面的新手,根本没有接触过 SQL,所以我可能需要一天左右的时间,但我会告诉你我发现了什么。 哇!谢谢! - 这正是我所需要的。我将不得不稍微调整报告以使其看起来像我想要的那样,并且我必须添加很多我没有包含在原始示例中的子字段,但是你让我走上了正确的轨道.对不起,我没有早点回复你,昨天我什至没有机会打开访问权限。这不是我的主要工作,但我不断收到抛出的项目,并在我去的时候自学。非常有帮助 - 我非常感谢你。 我唯一需要添加的是为没有子部门的主要培训领域添加一个部分。 (对于上面的查询,那些只是没有显示,因为没有子区域)所以我添加了所有相同的额外行:INNER JOIN Table1 AS Table1_1 ON Table1.[ID] = Table1_1.ID跨度>以上是关于生成表/报告中的子引用以显示访问中的子引用的主要内容,如果未能解决你的问题,请参考以下文章