我有一个查询,用于查找当前员工数据库中的员工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)
亲切的问候,
杰米沃伯顿答案 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