更新计算的[字段]基于单独表的状态

时间:2014-11-04 16:05:29

标签: ms-access ms-access-2010

我需要根据单独表格的结果更改计算字段的值。

我制作了一个小假数据库(附)以突出我的问题.. 当数据库打开时,我希望能够通过更改“计算字段”的值,在第一个屏幕上显示每个员工的所有培训是否都是最新的。

  1. 我有5名员工。
  2. 每位员工必须参加5次(或更多次)培训。
  3. 所有培训不得过期。
  4. 如果单个培训到期,则将计算字段值更改为“NO GOOD”
  5. 如果所有培训未到期,请将计算字段值更改为“ALL GOOD”
  6. 我不知道如何处理这种情况。我是否需要创建一个单独的“临时表”来存储该值?

    数据库在这里找到: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;
    

    这样做的目的是让我的生活更轻松,并且能够一目了然地看到哪些员工需要进行经常性培训,哪些是最新的..我仍然无法想象如何做到这一点..我我是(谷歌是我老师的一种访问用户:()

1 个答案:

答案 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 表来获取他们的名字。

您可能还需要解决其他问题:

  1. 如果员工尚未完成任何培训,或者他的所有培训都已过期,他的名字是否应出现在查询中(以及基于该查询的表格)?
  2. 您的标准是基于5项或更多 不同的 培训吗?例如,如果一名员工在过去一个月内完成了5次相同的培训,那么他的 TrainingStatus 是好还是不好?