我需要根据单独表格的结果更改计算字段的值。
我制作了一个小假数据库(附)以突出我的问题.. 当数据库打开时,我希望能够通过更改“计算字段”的值,在第一个屏幕上显示每个员工的所有培训是否都是最新的。
我不知道如何处理这种情况。我是否需要创建一个单独的“临时表”来存储该值?
数据库在这里找到:http://1drv.ms/1tX7L9M
我无法链接图片或超过2个链接,请查看以下内容: http://1drv.ms/1tXhr45
这是我的查询。
SELECT Training.ID, Training.EmployeeID, Employees.Name, Training.TrainingID, Training.TrainingDate, TrainingList.Frequency, DateAdd("m",[frequency],[TrainingDate]) AS DueDate
FROM Employees INNER JOIN (Training INNER JOIN TrainingList ON Training.TrainingID = TrainingList.TrainingID) ON Employees.EmployeeID = Training.EmployeeID;
我需要检查每个员工的所有培训是否是最新的。如果是,那么我需要通过更改我的第一个表单中的值来显示它。第一个表单的记录源是这样的:
SELECT DISTINCTROW Employees.ID, Employees.Name, Employees.EmployeeID, "Help With This Field" AS TrainingStatus
FROM Employees;
这样做的目的是让我的生活更轻松,并且能够一目了然地看到哪些员工需要进行经常性培训,哪些是最新的..我仍然无法想象如何做到这一点..我我是(谷歌是我老师的一种访问用户:()
答案 0 :(得分:1)
您有一个查询计算所有培训记录的 DueDate 。将其用作另一个查询的数据源,在该查询中,您将结果限制为仅 DueDate 尚未传递的记录。
SELECT tq.*
FROM [Training Query] AS tq
WHERE (((tq.DueDate)>=Date()));
如果该查询返回正确的记录 - 只有那些尚未过期的培训 - 在WHERE
查询中重用其GROUP BY
子句,您可以在其中计算每个未过期培训的数量雇员。
SELECT tq.EmployeeID, Count(tq.TrainingID) AS CountOfTrainingID
FROM [Training Query] AS tq
WHERE (((tq.DueDate)>=Date()))
GROUP BY tq.EmployeeID;
如果该查询也产生了合理的结果,那么当 CountOfTrainingID >时,您可以使用IIf
表达式返回" ALL GOOD" = 5和"没有好" 当它<'&#; 5。
SELECT
sub.EmployeeID,
sub.CountOfTrainingID,
IIf(
sub.CountOfTrainingID >= 5,
'ALL GOOD',
'NO GOOD'
) AS TrainingStatus
FROM
(
SELECT tq.EmployeeID, Count(tq.TrainingID) AS CountOfTrainingID
FROM [Training Query] AS tq
WHERE (((tq.DueDate)>=Date()))
GROUP BY tq.EmployeeID
) AS sub;
这应该可以帮助你实现目标。您仍然需要加入 Employees 表来获取他们的名字。
您可能还需要解决其他问题: