Объединение двух запросов к базе данных

#database #ms-access

#База данных #ms-access

Вопрос:

Я использую базу данных Access для отслеживания остатков моих личных ежегодных отпусков и отпусков по болезни (AL / SL) по мере начисления и использования часов отпуска.

У меня есть один запрос, который определяет, какие периоды оплаты имеют право на получение отпуска, и показывает каждый период с суммой заработанного отпуска. (В настоящее время по 4 часа на AL / SL для каждого периода.)

 --- qryEarned Leave ------------------------
Period      PP      Code    Earned
2/14/2015   03-1    AL      4
2/14/2015   03-1    SL      4
2/28/2015   04-1    AL      4
2/28/2015   04-1    SL      4
3/14/2015   05-1    AL      4
3/14/2015   05-1    SL      4
3/28/2015   06-1    AL      4
3/28/2015   06-1    SL      4
4/11/2015   07-1    AL      4
4/11/2015   07-1    SL      4
4/25/2015   08-1    AL      4
4/25/2015   08-1    SL      4
5/9/2015    09-1    AL      4
5/9/2015    09-1    SL      4
5/23/2015   10-1    AL      4
5/23/2015   10-1    SL      4
6/6/2015    11-1    AL      4
6/6/2015    11-1    SL      4
6/20/2015   12-1    AL      4
6/20/2015   12-1    SL      4
  

Второй запрос извлекает данные, показывающие, когда я использовал leave.

 --- qryUsedLeave ---------------------------
Period      PP      Code    Total
3/21/2015   05-2    SL      10
5/16/2015   09-2    AL      8
5/23/2015   10-1    AL      24
6/20/2015   12-1    SL      8
  

Что я хочу сделать, так это объединить оба этих запроса, чтобы «Общее» из использованного отпуска указывалось после «заработанного» отпуска за каждый период:

 --- Desired Result -------------------------
Period      PP      Code    Earned  Used
2/14/2015   03-1    AL      4       -
2/14/2015   03-1    SL      4       -
2/28/2015   04-1    AL      4       -
2/28/2015   04-1    SL      4       -
3/14/2015   05-1    AL      4       -
3/14/2015   05-1    SL      4       -
3/21/2015   05-2    SL      -       10
3/28/2015   06-1    AL      4       -
3/28/2015   06-1    SL      4       -
4/11/2015   07-1    AL      4       -
4/11/2015   07-1    SL      4       -
4/25/2015   08-1    AL      4       -
4/25/2015   08-1    SL      4       -
5/9/2015    09-1    AL      4       -
5/9/2015    09-1    SL      4       -
5/16/2015   09-2    AL      -       8
5/23/2015   10-1    AL      4       24
5/23/2015   10-1    SL      4       -
6/6/2015    11-1    AL      4       -
6/6/2015    11-1    SL      4       -
6/20/2015   12-1    AL      4       -
6/20/2015   12-1    SL      4       8
  

Что я могу сделать, чтобы объединить эти запросы для получения желаемого результата?
Я уверен, что это должно быть довольно просто, но я просто не могу понять это. (В настоящее время у меня просто есть модуль VBA, который вставляет первый запрос в таблицу, затем считывает второй запрос, чтобы либо обновить строку, либо вставить новую, и вычисляет начальный / конечный баланс)

Ответ №1:

Первым шагом является создание запроса на ЛЕВОЕ СОЕДИНЕНИЕ из qryEarned в qryUsed на PP.

Это даст вам все строки qryEarned с соответствующими qryUsed данными, но без дополнительных qryUsed строк (например 05-2 ).

Если вы не можете добавить эти периоды к «заработанным» данным (это было бы проще всего), создайте второй запрос соединения СЛЕВА, на этот раз наоборот, и критерии qryEarned.PP IS NULL . Помощник по обработке запросов для противоречивых или несоответствующих данных может создать для вас такой запрос.
Это даст только недостающие строки из qryUsed.

Наконец, используйте запрос ОБЪЕДИНЕНИЯ, чтобы объединить оба.

Комментарии:

1. Спасибо! Я полагал, что это должно быть какое-то ОБЪЕДИНЕНИЕ, но qryEarned.PP IS NULL тест — это та часть, которая ускользала от меня.