GROUP BY ДИСК.КодДиска, ФИЛЬМ.Название, ФИЛЬМ.Год, ФИЛЬМ.Жанр, ФИЛЬМ.Режиссер, ФИЛЬМ.Продолжительность, ДИСК.Звук, ДИСК.Наличие
HAVING (((ДИСК.Наличие)=True) AND ((Last(ПРОКАТ.ДатаЗакрытия)) Is Not Null));
Объединяющий запрос:
SELECT [_Диски_в_наличии_которые_ни_разу_не_выдавлись].КодДиска, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Название, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Год, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Жанр, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Режиссер, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Продолжительность, [_Диски_в_наличии_которые_ни_разу_не_выдавлись].Звук
FROM _Диски_в_наличии_которые_ни_разу_не_выдавлись
UNION SELECT [_Возврвщеные_диски].КодДиска, [_Возврвщеные_диски].Название, [_Возврвщеные_диски].Год, [_Возврвщеные_диски].Жанр, [_Возврвщеные_диски].Режиссер, [_Возврвщеные_диски].Продолжительность, [_Возврвщеные_диски].Звук
FROM _Возврвщеные_диски;
Результат:
Запрос 2.
Сформировать список дисков находящихся «на руках» клиентов.
Этот запрос должен список дисков, с указанием данных о записанных на них фильмах, которые в наличии и у которых дата закрытия в табличке отсутствует. Желательно также указать паспортные данные клиента, за которым числиться диск.
Текст запроса:
SELECT ДИСК.КодДиска, ФИЛЬМ.Название, ФИЛЬМ.Год, ФИЛЬМ.Жанр, ФИЛЬМ.Режиссер, ФИЛЬМ.Продолжительность, ДИСК.Звук, ДИСК.Наличие, ПРОКАТ.ДатаОткрытия, ПРОКАТ.ДатаЗакрытия, ПРОКАТ.Паспорт
FROM ФИЛЬМ INNER JOIN (ДИСК INNER JOIN ПРОКАТ ON (ДИСК.КодДиска = ПРОКАТ.КодДиска) AND (ДИСК.КодДиска = ПРОКАТ.КодДиска)) ON ФИЛЬМ.КодФильма = ДИСК.КодФильма
WHERE (((ДИСК.Наличие)=True) AND ((ПРОКАТ.ДатаЗакрытия) Is Null));
Результат:
Запрос 3.[A1]
Определить рейтинг фильмов по количеству выдач за все время:
Этот запрос должен вернуть список всех фильмов, в порядке, начиная с тех, который больше всего раз выдавались и указать количество выдач для каждого диска.
Текст запроса:
SELECT Count(ФИЛЬМ.РейтингКинопоиск) AS [Count-РейтингКинопоиск], ДИСК.КодДиска, ФИЛЬМ.Название, ФИЛЬМ.Жанр, ФИЛЬМ.Год, ФИЛЬМ.Режиссер, ФИЛЬМ.РейтингКинопоиск
FROM (ФИЛЬМ INNER JOIN ДИСК ON (ФИЛЬМ.КодФильма = ДИСК.КодФильма) AND (ФИЛЬМ.КодФильма = ДИСК.КодФильма)) INNER JOIN ПРОКАТ ON (ДИСК.КодДиска = ПРОКАТ.КодДиска) AND (ДИСК.КодДиска = ПРОКАТ.КодДиска)
GROUP BY ДИСК.КодДиска, ФИЛЬМ.Название, ФИЛЬМ.Жанр, ФИЛЬМ.Год, ФИЛЬМ.Режиссер, ФИЛЬМ.РейтингКинопоиск
ORDER BY Count(ФИЛЬМ.РейтингКинопоиск) DESC;
Результат:
Запрос 4.
Вывести список, должников по каждому диску:
Результатом данного запроса должен стать список, содержащий перечень дисков, по которым уже появилась задолженность, с отображением клиента, просрочившего диск, просроченного количества дней, и суммы к оплате.
Текст запроса:
SELECT ПРОКАТ.КодДиска, ПРОКАТ.Паспорт, ПРОКАТ.ДатаОткрытия, ПРОКАТ.ДатаЗакрытия, Date()-[ДатаОткрытия]-1 AS Просрочено_дней, [СТОИМОСТЬ.Стоимость]*(Date()-[ДатаОткрытия]-1) AS [К оплате]
FROM СТОИМОСТЬ INNER JOIN ПРОКАТ ON (СТОИМОСТЬ.КодСтоимости = ПРОКАТ.КодСтоимости) AND (СТОИМОСТЬ.КодСтоимости = ПРОКАТ.КодСтоимости)
WHERE (((ПРОКАТ.ДатаЗакрытия) Is Null) AND ((Date()-[ДатаОткрытия]-1)>0));
Результат:
Запрос 5.[A2]
На какую сумму поставил дисков каждый поставщик:
Данный запрос должен выдать список поставщиков с итоговой суммой по всем купленным у них дискам.
SELECT ПОСТАВЩИК.Имя, Sum(ПОКУПКА.Стоимость) AS [Sum-Стоимость]
FROM ПОСТАВЩИК INNER JOIN ПОКУПКА ON (ПОСТАВЩИК.КодПоставщика = ПОКУПКА.КодПоставщика) AND (ПОСТАВЩИК.КодПоставщика = ПОКУПКА.КодПоставщика)
GROUP BY ПОСТАВЩИК.Имя;
Результат:
Архивирование данных из таблицы прокат.
Архивирование выполняется в три этапа. На первом этапе в таблицу Архив_ПРОКАТ добавляются записи из таблицы ПРОКАТ, в которых значение в поле дата закрытия не пустое (Is Not Null), т.е. те все записи, кроме тех в которых фигурируют не сданные диски. Вторым этапом осуществляется удаление всех, только что скопированных записей из таблицы ПРОКАТ. И третьим этапом осущетвляется обновление таблицы Архив_ПРОКАТ с целью внесения в нее названий фильмов, на случай когда будет произведено удаление информации о дисках «не в наличии». Выполнение этих трех этапов осуществляется с помощью одного макроса, и соответственно нажатия одной кнопки.
Архивирование шаг 1.
INSERT INTO Архив_ПРОКАТ ( КодОперации, Паспорт, КодДиска, ДатаОткрытия, ДатаЗакрытия, КодСтоимости, Коментарии )
SELECT ПРОКАТ.КодОперации, ПРОКАТ.Паспорт, ПРОКАТ.КодДиска, ПРОКАТ.ДатаОткрытия, ПРОКАТ.ДатаЗакрытия, ПРОКАТ.КодСтоимости, ПРОКАТ.Коментарии
FROM ПРОКАТ
WHERE (((ПРОКАТ.ДатаЗакрытия) Is Not Null));
Архивирование шаг 2.
DELETE ПРОКАТ.КодОперации, ПРОКАТ.Паспорт, ПРОКАТ.КодДиска, ПРОКАТ.ДатаОткрытия, ПРОКАТ.ДатаЗакрытия, ПРОКАТ.КодСтоимости, ПРОКАТ.Коментарии
FROM ПРОКАТ
WHERE (((ПРОКАТ.ДатаЗакрытия) Is Not Null));
Архивированиешаг 3.
UPDATE Архив_ПРОКАТ INNER JOIN (ФИЛЬМ INNER JOIN ДИСК ON (ФИЛЬМ.КодФильма = ДИСК.КодФильма) AND (ФИЛЬМ.КодФильма = ДИСК.КодФильма)) ON Архив_ПРОКАТ.КодДиска = ДИСК.КодДиска SET Архив_ПРОКАТ.Фильм = [ФИЛЬМ].[Название]
WHERE ((([ДИСК]![КодФильма])=[ФИЛЬМ]![КодФильма]));
Таблица ПРОКАТ до выполнения архивирования.
Таблица Архив_ПРОКАТ до выполнения архивирования
Таблица ПРОКАТ после выполнения архивирования.
Таблица Архив_ПРОКАТ после выполнения архивирования
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.