无重复的MS Access查询

时间:2019-05-17 14:11:50

标签: database ms-access access-vba

我正在构建一个不允许重复的查询。我建立了一个任务/时间管理器,并在表中创建了一个名为“活动”的列。这是对/错的开关,表示员工是忙还是闲。我现在正在建立一个查询,在该查询中,如果“活动”开关为true,则显示为“忙”,否则为“免费”。我可以使它工作,但显示重复项。在表中,我确实将其编入索引以不显示重复项,但仍在获取它们。

这是SQL视图:

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

这是当前设置: CurrentSetup

这是当前输出:

Output

最终目标是得到它,以便如果任何员工在“活动”字段上具有“真”标志,则他们一次会显示为“不可用”,但是如果他们在活动字段上具有所有“假”标签,则会出现一次为“可用”。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

选项:

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;

SELECT Employees.*, IIf(Q1.UserID Is Null, "Available", "UnAvailable") AS Status 
FROM Employees 
LEFT JOIN (SELECT DISTINCT UserID FROM tblTasks WHERE Active = True) AS Q1 
ON Employees.UserID = Q1.UserID;

SELECT UserID, Employee, IIf(DCount("*","tblTasks","Active=True AND UserID=" & [UserID])>0, "Unavailable", "Available") AS Status FROM Employees;

请注意使用LEFT JOIN来确保所有员工都被遣返。 INNER JOIN将排除未分配任务的员工。也许所有员工都有至少一项任务,但这允许一些可能性。

建议不要在命名约定中使用空格。
应该在“员工”中指定UserID作为主键。

答案 1 :(得分:0)

这将起作用:

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

因为字符串"Unavailable"大于字符串"Free"(或"Available")。
如果您选择其他字符串来表示可用性,则必须进行调整。
因此,如果您选择"Busy""Free",则必须更改为:

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