0

我希望主题行不会太令人困惑。

所以我有一个查询,它根据设计师的经理从表(设计时间)中选择数据。经理编号由表格收集。我正在使用查询设计器,此列有:

Field: Managers_ID: ID, 
Table: Managers
Criteria: [Forms]![SelectManagerAndDateRange]![ManagerNumber]

Managers 表具有“ID”作为其唯一标识符。

此查询的唯一缺陷是它不包括经理他/她自己工作过的任何设计时间。在查询设计视图中,我可以为要添加的其他记录添加第二个条件吗?我知道如何进一步过滤结果,但在这种情况下,我想添加更多。我可以在 Managers 表中查找有问题的经理的 PersonID,但随后我在 Design Hours 表中查找了 Person = that personID 的所有记录。

我正在使用 Access 2003。是的,我知道。我们计划在今年晚些时候升级到 2010。数据保存为 MDB。

任何帮助将不胜感激。

编辑:按要求截屏 问题中提到的关系和标准。 带圆圈的标准没有按预期工作。

4

2 回答 2

1

一个可能对您有所帮助的一般答案:如果两个查询的返回具有相同数量的字段,最简单的方法是使用联合语句。

【SQL查询1】

联盟

【SQL查询2】

[按语句排序]

请注意,使用 Union 时,第二个查询中的字段名称并不重要,只要您与第一个查询具有相同的数量并且它们是相同的类型。订购时,请使用第一个查询中的字段名称。

于 2012-04-06T01:30:05.413 回答
0

当您想要从不同的表中检索具有相同结构的数据时,可以使用UNION查询。

在您的情况下,我认为最好的解决方案是JOIN查询,例如

SELECT M.field1, M.field2, M.field3, H.field1, H.field2 ...whatever fields you need
FROM Managers as M
LEFT OUTER JOIN [Design Hours Table] as H
  ON H.Person = M.PersonID
ORDER BY ... whatever order you want

您可以将此查询用作报表的RowSource,告诉 Access 按 Managers 表中的所有字段对结果进行分组。

但是,如果您将其用于表单,则可以使用表单/子表单组合。

您将原始查询设置为表单的RowSource,并使用所有所需的字段和标签对其进行设计。然后你插入一个SubForm

添加子表单

并告诉 Access 使用现有表或查询子表单数据,然后为此选择Design Hours表,并选择使用字段PersonID为Managers中的每条记录显示 Design Hours 中的记录。

现在,我想评论另一个问题:您在Managers表中有一个PersonID字段,这是正确的,因为经理是一个人。您的设计中不正确的是 Managers 表中存在FirstNameLastName列(除非它不是真正的表,而是查询)。原因是PersonID定义了一组属性,FirstNameLastName就在其中。因此,根据您的设计,您最终可能会得到一个PersonID = 2013, FirstName = John, LastName的经理= O'Connor 和 People 表中的 ID 2013 指的是FirstName = Peter,LastName = Sellers,这将是不一致的。

此外,您不需要此表中的 ID,因为字段 PersonID 最适合用作此表的 PK。

您从 People 表中检索 Name 和 SurName,因此连接类似于

SELECT M.field1, M.field2, M.field3, P.FirstName, P.LastName, H.field1, H.field2 ...whatever fields you need
FROM (Managers as M
INNER JOIN People as P ON P.ID = M.PersonID)
LEFT OUTER JOIN [Design Hours Table] as H
  ON H.Person = M.PersonID
ORDER BY ... whatever order you want

问候,

于 2013-08-14T09:28:55.103 回答