Vba 无重复项的MS Access查询
我正在构建一个不允许重复的查询。我构建了一个任务/时间管理器,并在表中为其创建了一个名为“活动”的列。这是一个真/假切换,表示员工忙还是闲。我现在正在构建一个查询,希望它显示“active”开关是否为true,然后显示为“Busy”,否则如果为false,则显示为“Free”。我可以让这个工作,但它显示重复。在表中,我确实对它进行了索引,以不显示重复项,但我仍在获取它们 以下是SQL视图:Vba 无重复项的MS Access查询,vba,database,ms-access,Vba,Database,Ms Access,我正在构建一个不允许重复的查询。我构建了一个任务/时间管理器,并在表中为其创建了一个名为“活动”的列。这是一个真/假切换,表示员工忙还是闲。我现在正在构建一个查询,希望它显示“active”开关是否为true,然后显示为“Busy”,否则如果为false,则显示为“Free”。我可以让这个工作,但它显示重复。在表中,我确实对它进行了索引,以不显示重复项,但我仍在获取它们 以下是SQL视图: `SELECT Employees.Employee , IIf([Active]=True,"Una
`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标志;所以他有“自由”和“不可用”,他被认为是不可用的,即使他有一行说他是自由的。真胜于假。“希望这能帮你弄清楚一点?”肯怀特说。谢谢