首页 > 解决方案 > 跨多个表查询以连接数据

问题描述

我有多个访问表,其中包含一个名为 Attribute 的字段和一个名为 Source 的字段。我想运行一个查询,列出所有访问表中的所有属性,并列出特定属性显示的每个源。我假设这是两个单独的查询。我不知道如何编写这个特定的查询。

表 1
属性 | 源
内存 | Mem
Mem.Address | Mem
Mem.Last | Mem
Mem.First | 内存

表 2
属性 | 源
内存 | 部门
部门地址 | 上一页
| 部门
部门第一 | 部门

表 3
属性 | 来源
省 | Prov
Prov.Address |省 Prov Prov
.最后 | Prov
Prov.First | 省
内存 | 省

ExpectedResultsQuery
属性 | 源
内存 | Mem, Dep & Prov
Mem.Address | Mem
Mem.Last | Mem
Mem.First | 内存
地址 | 上一页
| 部门
部门第一 | 省
部 | Prov
Prov.Address |省 Prov Prov
.最后 | Prov
Prov.First | 省

标签: ms-access

解决方案


UNION 查询可以组合第一阶段的表。

SELECT Attribute, Source, "T1" AS Src FROM Table1
UNION SELECT Attribute, Source, "T2" FROM Table2
UNION SELECT Attribute, Source, "T3" FROM Table3

第二个查询可以使用第一个查询作为 VBA 函数的源,该函数将源值连接到每个属性。http://allenbrowne.com/func-concat.html上的一个这样的功能。

MEM 似乎只是具有多个来源的属性。VBA 函数对这种最小结果进行了大量处理,并且可以在大型数据集上执行缓慢。相反,可以只构建一个按属性分组的报告。

将 Source 值连接到单个字符串的替代方法是使用 UNION 查询作为源的 CROSSTAB 查询:

TRANSFORM First(TableUNION.Source) AS FirstOfSource
SELECT TableUNION.Attribute
FROM TableUNION
GROUP BY TableUNION.Attribute
PIVOT DCount("*","TableUNION","Attribute='" & [Attribute] & "' AND  Source<'" & [Source] & "'")+1;

推荐阅读