Поиск записей, не имеющих подчиненных
Такой запрос позволяет найти в таблице записи, у которых нет записей в подчинённой таблице.
Пример 16. Получить сведения о предприятиях, которые не произвели оплату.
Удалить из таблицы ПЛАТЕЖИ две записи, которые относятся к предприятию с кодом 103 (Север). Таким образом, данное предприятие не производило выплат. Создать запрос, с помощью которого можно определить неплательщика.
Запрос строим на таблицах ПРЕДПРИЯТИЯ и ПЛАТЕЖИ, последовательно выполняя следующие действия:
· запустим Мастер запросов
· в открывшемся окне выберем из списка «Записи без подчинённых», нажать ОК;
· В окне «Поиск записей, не имеющих подчинённых» выбрать таблицу ПРЕДПРИЯТИЯ, нажать Далее;
· В следующем окне выбрать таблицу ПЛАТЕЖИ, Далее.
· В следующем окне щёлкнуть по кнопке , затем Далее.
· Выбрать поля: Код предприятияиНаименование предприятия, для чего нажать кнопку , а затем - Далее.
· Нажать Готово.
· Запрос автоматически получит имя ‘ПРЕДПРИЯТИЯ’ без подчинённых ‘ПЛАТЕЖИ’. В результате получим :
Примечание:восстановить удалённые записи в таблице ПЛАТЕЖИ и СПЕЦИФИКАЦИЯ ПЛАТЕЖЕЙ.
Вычисления нарастающим итогом
Пример 17. Используя сведения о платежах, получить общую оплату по каждому предприятию нарастающим итогом от начала года.
Сначала дополним базу данных таблицей КАЛЕНДАРЬ, где № МЕСЯЦА - ключевое текстовое поле и НАИМЕНОВАНИЕ МЕС - текстовое поле.
№ МЕСЯЦА | НАИМЕНОВАНИЕ МЕСЯЦА |
Январь | |
Февраль | |
Март | |
Апрель |
Количество месяцев в календаре зависит от того периода, на который вычисляются нарастающие итоги.
Рассмотрим решение задачи по шагам.
Шаг 1. На основе таблиц ПЛАТЕЖИ и СПЕЦИФИКАЦИЯ ПЛАТЕЖЕЙ создадим запрос, в котором преобразуем дату в месяц (числовой) и вычислим суммы выплат каждого предприятия по месяцам.
В результате выполнения запроса получим:
Сохраним запрос под именем Суммы выплат по месяцам.
Шаг 2. На основе предыдущего запроса и таблицы календарь создадим запрос, в котором получим суммы нарастающим итогом.
Объекты не связывать!
Группировка выполняется по предприятиям, а затем по месяцам. В этих группах суммируются Sum-Cумма. Суммируются суммы оплаты при условии, что месяц оплаты <= (меньше или равен) месяцу календаря, то есть в пределах календаря.
При выполнении запроса получим:
Назвать запрос Нарастающие суммы.
Шаг 3. Если сумма в каждом следующем месяце не меняется, то получить итоги по последнему месяцу, в котором произошли изменения. Для этого использовать функцию Min для месяца. Запрос строим на основе предыдущего запроса.
Выполнить запрос:
Присвоить запросу имя Нарастающий итог.