【问题标题】:Access Query IIf Value in Values returned by another Query访问另一个查询返回的值中的查询 IIf 值
【发布时间】:2012-07-17 09:45:30
【问题描述】:

我有一个从当前员工数据库中查找员工 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)

亲切的问候,

杰米·沃伯顿

【问题讨论】:

    标签: ms-access


    【解决方案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
    

    派生表通常比子查询快。

    编辑重新评论

    星号有特定的含义,所以虽然你可以这样做,但我不建议这样做。

     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
    

    【讨论】:

    • 非常感谢您的快速回复。这似乎再次列出了员工的 EmpID,但前提是他们有一个团队,所以它在正确的轨道上。有没有办法,而不是显示 EmpID,只显示一个星号?
    • 是的,但是星号在 SQL 中具有特定的含义,所以我会将它作为您的表单或报表的显示内容。我会添加一个注释,但要谨慎。
    • 好吧,我想它不一定需要是星号。一个简单的“x”就可以了。有 4 个列表框,第一个显示当前员工的团队。如果您单击一个名称,它会在下一个列表框中显示他们的团队,依此类推(团队最多只有 4 个,因此有 4 个框)。如果他们有一个团队,星号将显示在名称之后,所以它是什么角色并不重要
    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多