Как показать всем отсутствующим сотрудникам даты только в запросе MS Access 2010? - PullRequest
0 голосов
/ 16 января 2019

Я хочу получить запрос, который показывает записи только тех сотрудников, которые отсутствовали в разные даты.

У меня есть два запроса в MS Access 2010. Один из них - qAllDatesAllEmp , который имеетвсе месячные даты для всех сотрудников.Второй - qDailyWorkEmp , который показывает работу сотрудников по дате.Теперь, скажем, у Emp1 была только одна пропущенная дата 5-Jan-2019;У emp2 пропал 15-Jan-2019 и т. д., результат должен показать мне только эти пропущенные даты с именами сотрудников.До сих пор я пробовал соединить поле даты с qAllDatesAllEmp с полем даты в qDailyWorkEmp со стрелкой соединения, указывающей с qAllDatesAllEmp на qDailyWorkEmp .Я также добавил поле даты из qDailyWorkEmp в таблицу запросов ниже, но снял флажок.Когда я запускаю этот запрос, он дает пустой результат.Я действительно приветствовал бы помощь экспертов о том, как получить желаемый результат ниже.

Мои данные выборки:

Query1: qAllDatesAllEmp contains {WorkDate; empID; empName; CityBased}
Query2: qDailyWorkEmp   contains {DailyDate; empID; empName; CityBased}

SQL для этого выглядит следующим образом:

SELECT qDailyWorkEmp.empID, qDailyWorkEmp.empName, qDailyWorkEmp.CityBased
FROM qAllDatesAllEmp LEFT JOIN
     qDailyWorkEmp
     ON qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate
WHERE (((qDailyWorkEmp.DailyDate) Is Null));

Мой желаемый вывод:

    empID; EmpName; MissingDate

    001;    ABC;       5-Jan-2019

    007;    LMN;      15-Jan-2019 

...and so on

1 Ответ

0 голосов
/ 16 января 2019

Из того, что я могу извлечь из вашего вопроса, кажется, что вы на правильном пути с вашим запросом left join, однако, поскольку ваш запрос qAllDatesAllEmp содержит основные данные, вы должны вывести данные из этого запроса для записи, для которых соответствующие значения равны нулю в вашем запросе qDailyWorkEmp.


В вашем запросе также есть опечатка в этой строке:

qAllDatesAllEmp.WhatDate = qDailyWorkEmp.DailyDate

Как вы указали в своем вопросе, запрос qAllDatesAllEmp содержит поля:

Query1: qAllDatesAllEmp contains {WorkDate; empID; empName; CityBased}

WhatDate не является одним из этих полей.


Вам также необходимо присоединить поле empID в обоих запросах, чтобы сравнивать поле даты на основе на сотрудника , а не сравнивать каждую дату с датами для всех сотрудников - следовательно, ваши критерии объединения должны быть:

qAllDatesAllEmp LEFT JOIN qDailyWorkEmp ON 
qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate AND
qAllDatesAllEmp.empID = qDailyWorkEmp.empID

С учетом предоставленной информации я мог бы предложить следующее:

SELECT 
    qAllDatesAllEmp.empID, 
    qAllDatesAllEmp.empName, 
    qAllDatesAllEmp.CityBased
    qAllDatesAllEmp.WorkDate as MissingDate
FROM 
    qAllDatesAllEmp LEFT JOIN qDailyWorkEmp ON 
    qAllDatesAllEmp.WorkDate = qDailyWorkEmp.DailyDate AND
    qAllDatesAllEmp.empID = qDailyWorkEmp.empID
WHERE 
    qDailyWorkEmp.DailyDate IS NULL
...