2014-11-04 4 views
2

Мне нужно изменить значение расчетного поля в зависимости от результатов из отдельной таблицы.Обновление Расчетное [Поле] Основание на состоянии отдельной таблицы

Я создал небольшую поддельную БД (прилагается), чтобы выделить мою проблему. Когда база данных открыта, я хочу показать на первом экране, значение «Расчетного поля».

  1. У меня 5 сотрудников.
  2. Каждый сотрудник должен сделать 5 (или более) тренингов.
  3. Все испытания не должны быть истекли.
  4. Если один тренинг истекли Изменение Рассчитано Поле для «NO ХОРОШО»
  5. Если все обучение не истек Изменение Рассчитано Поле для «ВСЕ ХОРОШО»

Я понятия не имею о том, как подойти к этот сценарий. Нужно ли создавать отдельную «таблицу темп» для хранения этого значения?

базы данных ЗДЕСЬ: 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; 

Цель этого сделать свою жизнь проще и быть в состоянии чтобы увидеть на первый взгляд, что сотрудники должны делать повторное обучение и которые в актуальном состоянии. Я до сих пор не могу представить, как это можно сделать. Я (Google - мой учитель, тип доступа пользователя :()

+0

Как вы узнаете о завершении обучения? – HansUp

+0

По другому расчетному полю в запросе на обучение. Это добавляет месяцы, которые необходимо переучивать, [Частота] до даты обучения. Значение даты истечения никогда не сохраняется в любой таблице. Должен ли я сохранить значение в таблице? –

+0

@HansUp Благодарим вас за помощь. У меня уже есть запрос, который делает то же самое, что вы только что опубликовали. Вот моя версия ..: SELECT Training.ID, Training.EmployeeID, Employees.Name, Training.TrainingID, Training.TrainingDate, TrainingList.Frequency, DateAdd ("m", [частота], [TrainingDate]) AS DueDate FROM Сотрудники INNER JOIN (Training INNER JOIN TrainingList ON Training.TrainingID = TrainingList.TrainingID) ON Employees.EmployeeID = Training.EmployeeID; –

ответ

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; 

Если этот запрос также производит вменяемые результаты, вы можете использовать IIf выражение для возврата "ВСЕ ХОРОШО" когда CountOfTrainingID> = 5 и "NO ХОРОШО" когда это < 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; 

Это должно помочь вам в достижении цели.Вам нужно будет присоединиться к таблице служащих, чтобы получить их имена.

Там могут быть и другие вопросы, которые вы по-прежнему необходимо решить:

  1. Если работник еще не завершен какие-либо тренировки, или все его тренировки истек, если его имя появится в запросе (и по форме, на основе по этому запросу)?
  2. Вы находитесь на базе 5 или более Разное тренировки? Например, если работник завершил только ту же подготовку 5 раз в прошлом месяце, должен ли он быть хорошим или нехорошим? TrainingStatus?
+0

Спасибо, HansUp .... Я перехожу по вашему подходу, и я думаю, что могу определенно заставить его работать. Я не знал, что вы можете использовать запрос, как вы только что сделали в последнем разделе кода, где вы «группируете» tq.EmployeeID и используете «Count», чтобы сопоставить его с общим количеством тренировок (например, 5). Поскольку реальный общий подсчет обучения на реальном БД зависит от описания задания для каждого сотрудника. Все, что мне действительно нужно сделать, это предоставить этот номер вашему коду, и я могу сказать, что эта проблема окончена ... Вы предоставили отличную информацию, я вам очень благодарен. –

Смежные вопросы