Этап 2. Создание запросов к базе данных.
Перейдите на вкладку Запросы (Queries) вAccess2003 или вкладку Создание вAccess2007 и выберете создание запроса с помощью конструктора (CreatequerieswithDesignview) и создайте следующие запросы:
Запрос для вывода всех абонентов и установленных у них тарифных планов.
Запрос для вывода всех абонентов не совершавших междугородних звонков*.
Запрос определения количества абонентов на каждом тарифном плане*.
Запрос на вывод городов стоимость минуты у которых находится в интервале:
от 3 до 8 рублей*.
Интервал задается параметрами вводимыми пользователем*.
Примечание: Необходимо использовать запрос с двумя параметрами
Простой запрос для вывода клиентов не совершивших ни одного звонка;
за все время работы компании*.
за последний месяц.
Примечание: создание этого запроса происходит в два этапа. На первом этапе необходимо создать запрос выводящий клиентов совершавших звонки в этом месяце. На втором создать запрос на основе таблицы Клиенты, а в качестве условия отбора использовать результат предыдущего запроса. Для этого необходимо использовать ключевое слово in, который проверяет равно ли значение выражения какому-либо значению из указанного списка, в качестве списка может быть фиксированный набор значений или результат другого запроса (например: in (select Имя from Запрос1)).При желании этот запрос можно сделать в один этап но необходимо знание SQL.
Запрос с параметром для вывода клиентов выбранного пользователем тарифного плана.
Запрос подсчета междугородних звонков и их стоимости. Данный запрос должен выводить информации о коде абонента, дате, продолжительности разговора, коде города и итоговой стоимости разговора.
Примечание: В реализации этого запроса используются функции определения года и месяца (year и month). Для определения стоимости разговора создайте вычисляемое поле, в котором стоимость минуты с конкретным городом надо умножить на продолжительность разговора в минутах. Продолжительность разговора в минутах можно определить, применив функции Часы и Минуты к разности между окончанием и началом разговора либо умножив эту разность на 1440. В этом случае обязательно округлите результат до ближайшего целого.
Запрос подсчета стоимости внутригородских звонков. Данный запрос должен выводить информацию о коде абонента, используемом тарифном плане, дате и продолжительности разговора и содержать условие на отсутствие кода города, т.е. междугородние звонки учитываться не должны.
Примечание: Этот запрос должен включать как минимум следующие поля: код абонента, тариф, год и месяц разговора, продолжительность разговора.
Запрос подсчета итоговой стоимости междугородних звонков. В результатах запроса должны выводиться итоговые затраты абонента на междугородние звонки в месяц.
Примечание: В этом запросе должны быть следующие поля код абонента, месяц и год в которых совершались звонки и общая их стоимость. В качестве источника запроса лучше всего использовать запрос подсчета междугородних звонков, созданный ранее, а также групповые операции по необходимым полям.
Запрос на определение ежемесячного превышения тарифного лимита на внутригородские звонки. В запросе выводятся следующие поля: код абонента, год и месяц разговора, время, перерасход минут разговора, итоговая стоимость выговоренных минут.
Примечание: в качестве источника запроса необходимо использовать запрос подсчета стоимости внутригородских звонков (запрос №2) и таблицы Абоненты и Тарифы для определения минут, входящих в тариф. Для учета безлимитного тарифа лучше всего использовать функции Если (iif ) примерно в таком виде: перерасход: IIf(IsNull([тарифы]![Лимит времени]);0;IIf([время2]>[тарифы]![Лимит времени];[время2]-[тарифы]![Лимит времени];0))
Запрос для определения итоговых расходов каждого абонента за месяц. Для создания этого запроса необходимо сделать ряд подготовительных этапов:
Откройте конструктор запросов и в качестве источника выберете запрос для подсчета итоговой стоимости междугородних звонков. Добавьте все поля для вывода и после этого перейдите в режим редактирования SQL. Скопируйте текст запроса в блокнот или любой удобный Вам текстовый редактор
Удалите текст созданного запроса и снова перейдите в режим конструктора. Выберете в качестве источника запрос на определение ежемесячного превышения лимита и также добавьте все поля для вывода. Перейдите в режим редактирования SQLи снова скопируйте полученный текст.
В настройках запроса выберете тип запроса – объединение (union) и затем в режиме редактированияSQLскопируйте обратно сначала первый запрос, потом добавьте ключевое словоunionallи в конце второй запрос. Сохраните получившийся запрос.
Внимание: обратите внимание, что Access в конце запросов ставит точку с запятой. Ее надо удалить в конце первого запроса перед словом union.
Создайте новый простой итоговый запрос и в качестве источника выберете созданный до этого запрос на объединение. Добавьте необходимые групповые операции к полям и сохраните полученный результат.
Запрос с параметром для определения суммарной продолжительности разговоров по каждому тарифному плану в течение месяца. Параметр запроса – интересующий вас месяц.
Итоговый запрос: количество и общая продолжительность разговоров с каждым городом.
Перекрестный запрос: суммарная продолжительность городских и междугородних разговоров каждого абонента. Примерный вид запроса: