Vba 无重复项的MS Access查询

Vba 无重复项的MS Access查询,vba,database,ms-access,Vba,Database,Ms Access,我正在构建一个不允许重复的查询。我构建了一个任务/时间管理器,并在表中为其创建了一个名为“活动”的列。这是一个真/假切换,表示员工忙还是闲。我现在正在构建一个查询,希望它显示“active”开关是否为true,然后显示为“Busy”,否则如果为false,则显示为“Free”。我可以让这个工作,但它显示重复。在表中,我确实对它进行了索引,以不显示重复项,但我仍在获取它们 以下是SQL视图: `SELECT Employees.Employee , IIf([Active]=True,"Una

我正在构建一个不允许重复的查询。我构建了一个任务/时间管理器,并在表中为其创建了一个名为“活动”的列。这是一个真/假切换,表示员工忙还是闲。我现在正在构建一个查询,希望它显示“active”开关是否为true,然后显示为“Busy”,否则如果为false,则显示为“Free”。我可以让这个工作,但它显示重复。在表中,我确实对它进行了索引,以不显示重复项,但我仍在获取它们

以下是SQL视图:

 `SELECT Employees.Employee
 , IIf([Active]=True,"Unavailable","Free") AS Avail
 FROM tblTasks INNER JOIN Employees ON tblTasks.[User ID] = Employees.UserID;`
这是当前设置:

这是电流输出:

最终目标是获得它,这样,如果任何员工在“活动”字段上有一个“真”标志,那么他们将显示一次“不可用”,但如果他们在活动字段上有所有“假”标记,那么他们将显示一次“可用”

任何帮助都将不胜感激。

选项:

SELECT Employees.UserID, Employee, IIf(CntTrue>0, "Unavailable", "Available") AS Status 
FROM Employees 
LEFT JOIN (SELECT Count(*) AS CntTrue, UserID FROM tblTasks 
           WHERE Active = True GROUP BY UserID) AS Q1 
ON Employees.UserID = Q1.UserID;

选择UserID、Employee、IIf(DCount(“*”、“tblTasks”、“Active=True”和UserID=“&[UserID])>0、“不可用”、“可用”)作为来自Employees的状态

注意使用左连接以确保所有员工返回。内部联接将排除未分配任务的员工。也许所有员工都至少有一项任务,但这允许一些员工没有

建议不要在命名约定中使用空格。
可能应将员工中的用户ID指定为主键。

选项:

SELECT Employees.UserID, Employee, IIf(CntTrue>0, "Unavailable", "Available") AS Status 
FROM Employees 
LEFT JOIN (SELECT Count(*) AS CntTrue, UserID FROM tblTasks 
           WHERE Active = True GROUP BY UserID) AS Q1 
ON Employees.UserID = Q1.UserID;

选择UserID、Employee、IIf(DCount(“*”、“tblTasks”、“Active=True”和UserID=“&[UserID])>0、“不可用”、“可用”)作为来自Employees的状态

注意使用左连接以确保所有员工返回。内部联接将排除未分配任务的员工。也许所有员工都至少有一项任务,但这允许一些员工没有

建议不要在命名约定中使用空格。
可能应将员工中的用户ID指定为主键。

这将起作用:

select 
  e.employee,
  max(iif(t.active, "Unavailable", "Free"))
from Employees e inner join tblTasks t
on t.userid = e.userid
group by e.userid, e.employee
因为字符串
“不可用”
大于字符串
“免费”
(或
“可用”

如果选择不同的字符串表示可用性,则必须进行调整。
因此,如果您选择了
“忙”
“闲”
,则必须更改为:

select 
  e.employee,
  min(iif(t.active, "Busy", "Free"))
from Employees e inner join tblTasks t
on t.userid = e.userid
group by e.userid, e.employee
这将有助于:

select 
  e.employee,
  max(iif(t.active, "Unavailable", "Free"))
from Employees e inner join tblTasks t
on t.userid = e.userid
group by e.userid, e.employee
因为字符串
“不可用”
大于字符串
“免费”
(或
“可用”

如果选择不同的字符串表示可用性,则必须进行调整。
因此,如果您选择了
“忙”
“闲”
,则必须更改为:

select 
  e.employee,
  min(iif(t.active, "Busy", "Free"))
from Employees e inner join tblTasks t
on t.userid = e.userid
group by e.userid, e.employee

请发布Access生成的SQL。您将得到重复的SQL,因为您的查询将返回每个
tblTask
行的结果,而不是每个
Employee
行的结果。如果同一名员工有多个
tblTask
行,行中有不同的
Active
值,该怎么办?如果任何员工在“Active”字段中有一个true,我希望它显示为不可用,但如果它们都为false,我希望它们显示为可用。这就是我的目标,因为我没有说得更清楚。。。仍在等待咖啡因的加入。目标是,如果有人,例如使用Damian,在任何记录的活动字段中具有true标志;所以他有“自由”和“不可用”,他被认为是不可用的,即使他有一行说他是自由的。真胜于假。“希望这能帮你弄清楚一点?”肯怀特说。谢谢请发布Access生成的SQL。您将得到重复的SQL,因为您的查询将返回每个
tblTask
行的结果,而不是每个
Employee
行的结果。如果同一名员工有多个
tblTask
行,行中有不同的
Active
值,该怎么办?如果任何员工在“Active”字段中有一个true,我希望它显示为不可用,但如果它们都为false,我希望它们显示为可用。这就是我的目标,因为我没有说得更清楚。。。仍在等待咖啡因的加入。目标是,如果有人,例如使用Damian,在任何记录的活动字段中具有true标志;所以他有“自由”和“不可用”,他被认为是不可用的,即使他有一行说他是自由的。真胜于假。“希望这能帮你弄清楚一点?”肯怀特说。谢谢