【问题标题】:Query/Relationship from multiple Fields to a single Field in Related Table/Query从多个字段查询/关系到相关表/查询中的单个字段
【发布时间】:2020-08-01 17:41:14
【问题描述】:

如果在 SO 中回答了这个问题,我们深表歉意。我搜索并找不到明显的重复项。我是 Access 新手,继承了旧的 Access MDB(2000 文件格式)。 [注意:我使用的是 Office 365。]

数据在 5 个表中。但是,只有 4 个与关系相关。第五个(未连接)表是 3 个字段中不同数据的混搭:TypeCodeDescriptionType 有多个具有重复值的行。每个类型行都有一个唯一的CodeDescription。每个唯一类型对应于 Table_1 中的一列,代码是在该列中找到的值。 (Table_5 中有 3000 行,有超过 250 种独特的类型,每种类型都有 1-500 多个代码。) 这是 Table_5 的简化版本:

Type   Code  Description
Atype  A     Atype_A_Description
Atype  B     Atype_B_Description
Atype  X1    Atype_X1_Description
...
Class  1     Class_1_Description
Class  2     Class_2_Description
Class  9     Class_9_Description
...
Source A     Source_A_Description
Source A1    Source_A1_Description
Source A2    Source_A2_Description
...

更复杂的是,Table_1 中的字段名称与 Table_5 中的类型条目之间不完全匹配。 (例如,Table_5 中的 Atype 值对应于 Table_1 中名为 ACC_TYPE1 的字段。)

我正在研究一种基于 Table_1 中的字段名称和值从 Table_5 中获取描述的方法。我为 1(硬编码)类型做了这个。我在 Table_5 中为该类型创建了一个查询,并通过关系将其连接到 Table_1。

这是我所做的:
Table_5_Atype_Query(作为 SQL,如果在 SO 中首选另一种格式,请告诉我)

SELECT Table_5.[Type], Table_5.[Code], Table_5.[Description]
FROM Table_5
WHERE (((Table_5.[Type])="Atype"));

关系是:

Table/Query:  Related Table/Query:
Table_1       Table_5_Atype_Query
ACC_TYPE1     Code

这非常适用于根据 Table_1 中 ACC_TYPE1 的值从 Table_5 中获取引用代码的描述字段。它不可扩展以查找其他类型/代码对的描述。 (我需要 250 个唯一的查询和关系。)换句话说,我想创建一个方法来根据 Table_1 中的任何列名和值从 Table_5 中获取描述。有没有更好的方法来做到这一点?

【问题讨论】:

  • 一个 UNION 查询可以将多个字段重新排列为一个字段,但一个 UNION 中的 SELECT 行限制为 50 个。您有 250 多个字段需要重新排列。我预计将需要 VBA 和临时表将这些数据重新排列为相关结构。
  • 对于所有 250 多个字段,我需要更多表,这并不奇怪。我不需要所有这些。超过 100 个字段只有 1 或 2 个代码。对于初学者,我对一些领域( [Table_5].Type=='value1'; [Table_1].Field2name -> [Table_5].Type=='value2'; [Table_1].Field3name -> [Table_5].Type=='value3';然后根据匹配的代码返回描述。 (一般来说,Fieldiname 和 valuei 是不一样的。)我是否需要另一个表来将 [Table_1].Fieldiname 映射到 [Table_5].Type 值?

标签: ms-access


【解决方案1】:

UNION 查询可以将字段重新排列为规范化的数据结构。

具有 5 个字段的 UNION 查询:

SELECT ID, field1 as Code, "f1" as src from table1
UNION SELECT ID, field2, "f2" from table1
UNION SELECT ID, field3, "f3" from table1
UNION SELECT ID, field4, "f4" from table1
UNION SELECT ID, field5, "f5" from table1;

当然,请使用您的实际字段和表名。 现在在另一个连接到 table5 的查询中使用该查询。

SELECT 行的限制为 50 行。 UNION 没有查询设计器或向导 - 必须使用 SQLView。

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 2021-10-01
    • 2022-10-04
    • 1970-01-01
    • 2020-06-27
    • 2017-06-20
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多