Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запросы.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
142.85 Кб
Скачать

Параметры запроса

Как было показано выше, конкретное значение в выражение условия отбора может вводиться непосредственно в бланк запроса. Однако при решении практических задач значительно удобнее вводить значение в диалоге с пользователем в процессе выполнения запроса. Для того чтобы выводилось диалоговое окно, обеспечивающее ввод конкретного значения в условия отбора, нужно определить параметр запроса,

Имя параметра запроса может задаваться непосредственно в строке Условия отбора (Criteria) в квадратных скобках. При выполнении запроса это имя появится в диалоговом окне Введите значение параметра (Enter Parameter Value).

Например, если в условии отбора рассмотренного ранее запроса (см. рис. 4.7) номер месяца — 3 — заменить на имя параметра — [номер месяца], то при выполнении запроса будет выводиться диалоговое окно (рис. 4.11), позволяющее задать значение параметра запроса — номер месяца.

В запросе может быть определено несколько параметров. При этом порядок их ввода через диалоговые окна определяется порядком расположения полей с параметрами в бланке запроса. Чтобы иметь возможность ввести несколько значений в условия отбора одного поля, можно в условии отбора этого поля определить несколько параметров. Например, для отбора записей по двум месяцам в условии отбора вычисляемого поля в приведенном примере можно записать два параметра, связанных логической операцией or: [Номер месяца] OR [Еще один номер]. "

Параметры запроса могут быть использованы для ввода значения операнда не только в выражения условий отбора, но и вычисляемых полей. Например, для увеличения цены на заданный процент вычисляемое поле с параметром запроса [на сколько процентов увеличить?] может быть записано аналогично тому, как показано на рис. 4.12.

Рис. 4.12. Использование параметра запроса в выражении вычисляемого поля

Использование групповых операций в запросах

Назначение групповых операций

Групповые операции позволяют выделить группы записей с одинаковыми значениями в указанных полях и использовать для этих групп одну из ста­тистических функций.

В Access предусматривается девять статистических функций:

  • sum — сумма значений некоторого поля для группы;

  • Avg — среднее от всех значений поля в группе;

  • мах, Min — максимальное, минимальное значение поля в группе;

  • count — число значений поля в группе без учета пустых значений;

  • StDev — среднеквадратичное отклонение от среднего значения поля в группе;

  • var — дисперсия значений поля в группе;

  • First и Last — значение поля из первой или последней записи в группе.

Результат запроса с использованием групповых операций содержит по одной записи для каждой группы.

Порядок создания запроса с использованием групповых операций

Для создания запроса с использованием групповых операций формируется запрос на выборку. В бланк запроса включаются поля, по которым надо | произвести группировку, и поля, по которым надо произвести статистические вычисления.

Выполняется команда Вид|Групповые операции (View|Totals) или на панели инструментов конструктора запросов нажимается кнопка Групповые операции (Totals). Можно также нажать правую кнопку мыши и выбрать в контекстном меню Групповая операция (Total) (курсор мыши должен быть уста-1новлен в бланке запроса). В бланке запроса появляется строка Групповая Операция (Total), в которой для всех полей записано группировка (Group By).

Для того чтобы выполнить вычисления в группе по некоторому полю, нужно заменить в нем слово группировка (croup By) на статистическую функцию. Выбрать необходимую функцию можно через раскрывающийся в поле список.

Рассмотрим конструирование запроса с групповой операцией на примере таблицы ПОСТАВКА_ПЛАН.

Запрос с функцией Sum

Определим, какое суммарное количество каждого из товаров должно быть Обставлено покупателям по договорам. Все данные о запланированном к Доставке количестве товара указаны в таблице ПОСТАВКА_ПЛАН.

Создадим запрос на выборку для таблицы ПОСТАВКА_ПЛАН. Из списка таблицы перетащим в бланк запроса поле код_тов — код товара. Это поле создадим для дальнейшей группировки по нему. Перетащим в бланк запроса поле кол_пост, по которому будет вычисляться функция sum для подсчета суммарного количества конкретного товара, заказанного во всех договорах.

Нажмем кнопку Групповые операции (Totals). Заменим слово группировка

(croup By) в столбце кол_пост на функцию Sum. Для этого вызовем список и выберем эту функцию. Бланк запроса примет вид, показанный на рис. 4.13.

В поле код_тов отображается не код товара, сохраняемый в таблице ПОСТАВКА_ПЛАН, а его наименование. Это определяется тем, что в таблице для поля код_тов построен список на основе таблицы товар. Если в вашей базе данных поле код_тов не преобразовано в поле со списком, как показано в главе 3, в таблице запроса будет отображаться код товара.

Подпись поля Sum - КОЛ_ПОСТ можно заменить на Заказано товаров. Для ввода этой подписи перейдем в режим конструктора, в бланке запроса установим курсор мыши на поле кол_пост и нажмем правую кнопку. В контекстном меню выберем Свойства (Properties). В окне Свойства поля (Field Properties) наберем в строке Подпись (Caption) — заказано товаров.

Таблица результата после доработки запроса показана на рис. 4А5.

Рис. 4.15. Таблица результата с измененной подписью поля

Сохраним запрос-выборку под именем "Заказано товаров".

Если необходимо подсчитать количество товаров, заказанных в каждом месяце, группировка должна быть произведена по двум полям код_тов и срок_пост, во втором поле хранится номер месяца поставки (рис. 4.16, рис. 4.17).

Если необходимо подсчитать количество товаров, заказанных в заданном месяце, предыдущий запрос нужно дополнить вводом параметра запроса в условие отбора (рис. 4.18, 4.19).

Запрос с функцией Count

Определим, сколько раз отгружался товар по каждому из договоров. Факт отгрузки фиксируется документом "Накладная".

Создадим запрос на выборку на основе таблицы накладная. Из списка таблицы накладная перетащим в бланк запроса поле ном_дог — номер договора. По этому полю должна производиться группировка. По сути, смысл задачи сводится к подсчету в таблице числа строк с одинаковым номером договора, поэтому неважно, по какому полю будет вычисляться функция count. Перетащим в бланк запроса любое поле, например, опять ном_дог.

Нажмем кнопку Групповые операции (Totals). Заменим слово группировка (Group By) в одном из столбцов с именем ном_дог на функцию count. Бланк запроса примет вид, показанный на рис. 4.20.

Сохраним запрос под именем "Число отгрузок по договорам". Результат выполнения запроса показан на рис. 4.21.

Задание условий отбора в запросах с групповыми операциями

В запрос с групповыми операциями можно помимо полей, по которым производится группировка и выполнение статистических функций для групп, включать поля для задания условий отбора записей из таблиц.

Подсчитаем, сколько накладных было выписано по каждому из договоров и какова общая стоимость товаров, отгруженных по этим накладным. В расчете будем учитывать только накладные на сумму более 10 000 руб.

Для этого в бланк запроса Число отгрузок по договорам включим поле сумма_накл и заменим в нем слово Группировка (croup By) на функцию sum. Затем вторично включим поле сумма_накл в бланк запроса и заменим слово группировка (Group By) на слово Условие (where), выбрав его из списка. После этого введем в строку Условие отбора (Criteria) выражение: >10 000 (рис. 4.22).

Убедитесь, что число накладных для некоторых договоров уменьшилось, а общая стоимость по договору также считается только с учетом накладных на сумму более 10 000 руб. (рис. 4.23).

Условие отбора, заданное в поле, где записана функция, или в поле, по которому проводится группировка, позволяет отобрать только нужные группы записей, например, можно отобрать договоры с заданными номерами: in ("Д111";"ДЗЗЗ") или с заданной общей стоимостью отгрузки по ним: >100 000.

Использование в условии отбора функций

Допустим, необходимо выбрать запись с максимальным значением в поле, для которого записана статистическая функция. Задачу можно решить, использовав .функцию DMax. Эта функция позволяет определить максимальное значение в указанном наборе записей (подмножестве). Формат функции имеет вид: DMax{выражение,.подмножество, [условия_ртбора])

где выражение определяет поле, для которого надо найти максимальное значение, подмножество задает строковое выражение, определяющее набор записей, составляющих подмножество. Для имени таблицы или запроса не нужен параметр.

Аналогичная функция DMin позволяет определить минимальное значение.

На рис. 4.24 представлен запрос, выбирающий договор, по которому отгружен товар на максимальную сумму. Этот запрос построен на предыдущем запросе, сохраненном под именем "Число отгрузок по договорам". В условие отбора записана функция DMax {"[Sum-СУММА_НАКЛ]"; "Число отгрузок по договорам").

ЗАДАНИЕ 1. Условие отбора

Подсчитайте, какой товар был запланирован к поставке в максимальном количестве.