2012-07-17 38 views
1

我有一个查询从当前工作人员数据库查找员工ID,员工姓名和团队名称。我有另一个查询,列出团队名称中的所有唯一值。 (团队名称是一个整数,对应于员工ID,也是一个整数。)访问查询IIf由另一个查询返回的值的值

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

的EmpID = 100 TeamName = 10

的EmpID = 10 TeamName = 5

的EmpID = 5 TeamName = 1

什么我试图做的是返回第四个字段,当雇员ID也出现在团队名称查询中(因此意味着他们有一个团队/是经理)时,给出一个星号“*”。

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

表达式1:IIF(DCOUNT( “TeamName”, “jdbo_MostRecentEmpDataRemain”, “TeamName =” & [的EmpID])> 0, “*”, “”)

jdbo_MostRecentEmpDataRemain是返回所有数据查询积极的员工。

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

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

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

亲切的问候,

杰米·沃伯顿

回答

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 
+0

非常感谢您的快速响应。这似乎再次列出雇员的EmpID,但只有他们有一个团队,所以它是在正确的轨道上。有没有办法,而不是显示EmpID,只显示一个星号? – Jamie 2012-07-17 10:33:26

+0

是的,但星号在SQL中有特定的含义,所以我会将它作为表单或报表的显示内容。我会添加一个注释,但要谨慎。 – Fionnuala 2012-07-17 10:36:08

+0

嗯,我想它不一定是星号。一个简单的“x”就可以做到。有4个列表框,第一个显示当前员工的团队。如果你点击一个名字,它会在下一个列表框中显示他们的团队,等等(团队只有最多4个,因此4个盒子)。如果他们有一个团队,Asterisk会显示在名称后面,所以它是什么字符并不重要。 – Jamie 2012-07-17 10:46:26