1

我有一个从当前员工数据库中查找员工 ID、员工姓名和团队名称的查询。我有另一个查询,其中列出了团队名称中的所有唯一值。(Team Name是一个Integer,对应Employee ID,也是一个Integer。)

例如,这就是团队的结构。Emp ID 100 属于 Emp ID 10 的团队。10 属于 5。5 属于 1,等等。

EmpID = 100 团队名称 = 10

EmpID = 10 团队名称 = 5

EmpID = 5 团队名称 = 1

我要做的是返回第四个字段,当 Emp ID 也出现在 Team Name 查询中时,给出一个星号“*”(因此意味着他们有一个团队/是一个经理)。

我有一个可以工作的 DCount,但它比我想要的慢,并且只会随着数据库的增长而变慢,但它可能有助于解释我需要什么。

Expr1: IIf(DCount("TeamName","jdbo_MostRecentEmpDataRemain","TeamName = " & [EmpID])>0,"*","")

jdbo_MostRecentEmpDataRemain 是一个查询,它返回所有处于活动状态的员工的数据。

如果 EmpID 有分配给他们的团队成员,这将返回一个星号,如果没有,则不返回任何内容。

我想知道这是否可以通过查询应用以使其更快。如果您有任何建议,请告诉我。

我试过这个: Expr2: IIf([EmpID] In ([qryListOfTeams].[TeamName]),"a","z") 但这会返回很多 z,然后是 a,因为它似乎为每个返回一个值团队列表中的值。我希望它聚合这些,如果有 a,则显示 a,否则显示 z。(原来的“*”是a,“”是z)

亲切的问候,

杰米沃伯顿

4

1 回答 1

1

怎么样:

 SELECT * FROM TableOrQuery
 LEFT JOIN (SELECT DISTINCT EmpID FROM Teams 
            WHERE EmpID In (SELECT TeamName FROM Teams)) As a
 ON TableOrQuery.EmpID =  a.EmpID

派生表通常比子查询快。

编辑重新评论

Asterisk 有一个特定的含义,所以虽然你可以这样做,但我不推荐它。

 SELECT TableOrQuery.*, a.IsTeam FROM TableOrQuery
 LEFT JOIN (SELECT DISTINCT EmpID, "*" As IsTeam FROM Teams 
            WHERE EmpID In (SELECT TeamName FROM Teams)) As a
 ON TableOrQuery.EmpID =  a.EmpID
于 2012-07-17T09:56:53.180 回答