#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
тест — это та часть, которая ускользала от меня.