Access Query IIf另一个Query返回的值中的值

时间:2012-07-17 09:45:31

标签: ms-access

我有一个查询,用于查找当前员工数据库中的员工ID,员工姓名和团队名称。我有另一个查询列出了团队名称中的所有唯一值。 (团队名称是一个整数,对应于员工ID,也是一个整数。)

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

EmpID = 100 TeamName = 10

EmpID = 10 TeamName = 5

EmpID = 5 TeamName = 1

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

我有一个可行的DCount,但它比我想要的慢,并且只会随着数据库的增长而变慢,但它可能会解释我需要的东西。

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

jdbo_MostRecentEmpDataRemain是一个Query,它返回活动人员的所有数据。

如果EmpID有分配给他们的团队成员,则返回Asterisk,如果没有,则返回任何内容。

我想知道是否可以通过查询应用它来加快速度。如果您有任何建议,请告诉我。

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

亲切的问候,

杰米沃伯顿

1 个答案:

答案 0 :(得分: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