Объединения в итоговом запросе

Итоговые запросы невероятно полезны, когда они комбинируются с объединениями (см. разд. "Запросы и связанные таблицы" главы 6) для получения связанной информации из нескольких таблиц. В БД Boutique Fudge таблица OrderDetailsхранит отдельные компо­ненты каждого заказа. Вы можете сгруппировать эту информацию (как показано в преды­дущем разделе) для поиска самых ходовых товаров или самых активных клиентов. Но, к сожалению, вы увидите только значения кодов клиентов и товаров, которые малоинформативны.

Примечание

Если у вас есть подстановка, определенная для полей ProductID и CustomerID, вы увидите описание из поля подстановки (например, наименование товара, имя и фамилию клиента). Эта информация немного полезнее, но, возможно, вы хотите извлечь дополнительные сведения — например, адрес клиента, описание товара и т. д. — находящиеся вне связанной таблицы.

 

 

Если вставить в запрос объединение или два, можно извлечь подчиненную информацию из связанных таблиц (таких как Customers, Productsи Orders)и добавить ее в ваши ре­зультаты. На рис. 7.10 показан пример вычисления общей стоимости каждого заказа. Затем результаты отсортированы по коду клиента CustomerID.


 
 

Рис. 7.10. Вверху: итоговый запрос можно усовершенствовать, дополнив его информацией из трех связанных таблиц: Customers, Orders и OrderDetails, для отображения списка сумм заказов, упорядоченных по клиентам. В запросе игнорируются заказы стоимостью меньше $25. Можно вставить условие отбора в поле DatePlaced, чтобы узнать, сколько потратили клиенты до нынешнего дня текущего года, сколько они потратили в прошлом году, на прошлой неделе и т. д. Внизу: результаты сгруппированы по OrderID и отсортированы по LastName и FirstName, что сохраняет хороший уровень детализации

 

Вы уже знаете достаточно для того, чтобы построить запрос, показанный на рис. 7.10. Выполните следующие действии:

1. Создайте новый запрос, выбрав СозданиеДругиеКонструктор запросов(Create → Other → Query Design).

2. Вставьте нужные вам таблицы с помощью диалогового окна Добавление таблицы(Show Table) и затем щелкните мышью кнопку Закрыть(Close).


В примере на рис. 7.10 используются таблицы Customers, Ordersи OrderDetails.После добавления этих таблиц программа Access вставит линии объединения между ними на основе связей, установленных в вашей БД.

3. Выберите Работа с запросами | КонструкторПоказать или скрытьИтоги(Choose Query Tools | Design → Show/Hide → Totals).

У каждого поля появится ячейка Групповая операция.

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

Поля можно выбирать из любых связанных таблиц. В данном примере применяются следующие поля.

o OrderID— это поле используется для группировки результатов. Другими словами, вы хотите подытожить все записи в таблице OrderDetailsс одинаковым значением поля OrderID.Для выполнения этой работы в ячейке Групповая операциявыберите вариант Группировка.(Между прочим, неважно, какое поле вы выберите — OrderIDв таблице OrderDetailsили ГОв таблице Orders— они связаны.)

o OrderTotal— это вычисляемое поле, использующее выражение [Price] * [Quantity] для перемножения двух полей из таблицы OrderDetails.В результате получится итог для отдельной строки заказа. Программа Access суммирует эти строчные итоги для получения общего итога, поэтому задайте в ячейке Групповая операциявариант Sum.В поле OrderTotalвключено условие отбора >=25, скрывающее любые заказы с общей стоимостью ниже $25.

  • LastNameи FirstName— эти поля идентифицируют клиента, сделавшего заказ. Но здесь есть хитрость. Для отображения в итоговом запросе любого поля нужно вста­вить для него вычисление (как для поля OrderTotal)или использовать его для груп­пировки (как поле OrderID).Это означает, что вы должны установить в ячейке Груп­повая операциявариант Группировкадля обоих полей. Эта установка на самом деле не будет оказывать никакого влияния, поскольку каждый заказ делается всегда одним клиентом. (Другими словами, вы никогда не найдете в таблице OrderDetailsгруппу записей из одного заказа, но для разных клиентов. Это просто невозможно.) В ре­зультате программа Access не выполнит никакой группировки полей LastNameи FirstName,они просто будут отображаться рядом с каждым заказом.

 

 

Примечание

Этот трюк с группировкой немного странный, но широко применяется в итоговых запросах. Просто запомните, что программа Access создает самые маленькие доступные ей группы. Если вы хотите сгруппировать только по клиентам (так можно посмотреть, сколько потратил каждый клиент), нужно только удалить группировку в поле OrderIDи установить ее в поле CustomerID.Или если вы хотите подсчитать объем продаж конкретного товара, удалите всю информацию о клиенте, сгруппируйте данные по полю ProductIDи затем вставьте дополнительные поля из таблицы Products,которые вы хотите видеть на экране (например, ProductNameи Description).

 

5. Теперь можно выполнить запрос.


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

Параметры запроса — секретное оружие программы Access. Они позволяют создавать сверхгибкие запросы за счет умышленного пропуска одной или нескольких порций информации. При каждом запуске запроса Access запрашивает у вас пропущенные значения. Эти недос­тающие значения и называют параметрами запроса.

Обычно параметры запроса применяют в условиях отбора. Допустим, вы хотите вывести на экран список клиентов, живущих в конкретном штате. Можно создать целый набор за­просов, таких как New York Customers, CaliforniaCustomers, Ohio Customersи т. д. Если вас

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

Для создания запроса с параметрами выполните следующие действия:

1. Создайте новый запрос, выбрав на ленте Создание → Другие → Конструктор запросов(Create Other Query Design).

2. Из диалогового окна Добавление таблицы(Show Table) вставьте нужные вам таблицы и щелкните мышью кнопку Закрыть(Close).

Б данном примере используется таблица Customers.

3. Выберите Работа с запросами | Конструктор Показать или скрыть Параметры (Choose Query Tools | Design Show/Hide Parameters).

На экране появится диалоговое окно Параметры запроса(Query Parameters).

 

 
 

Рис. 7.11. Можно определить столько параметров, сколько нужно. В окне задан один параметр, названный CustomerState и содержащий текст


4. Выберите имя и тип данных для вашего параметра (рис. 7.11).

Вы можете использовать любое понравившееся вам имя (но не применяйте имя, которое используется для обозначения поля в вашем запросе). Тип данных должен соответство­вать типу данных поля, для которого используется параметр. Тип данных задается выбо­ром одного из вариантов в раскрывающемся списке. Самые распространенные варианты: Текстовый, Целый, Денежныйи Дата/время.

5. Щелкните мышью кнопку ОК для закрытия окна Параметры запроса.

Теперь можно ссылаться на параметр по имени так же, как вы ссылаетесь на поле в своем запросе. Например, можно добавить следующее условие отбора для поля State:

[CustomerState]

Убедитесь, что вы не забыли вставить квадратные скобки, чтобы программа Access знала, что вы не пытаетесь ввести фрагмент текста.

Во время выполнения запроса Access откроет диалоговое окно Введите значение пара­метра(Enter Parameter Value) для ввода конкретного значения (рис. 7.12). Введите интере­сующий вас штат и щелкните мышью кнопку ОК. Программа использует ваше значение для отбора в поле State.

 
 

Рис. 7.12. При каждом выполнении запроса можно ввести другой штат. В данном случае будут отобраны клиенты из штата Нью-Йорк

Подсказка

Несмотря на то, что такая возможность есть, лучше не применять несколько параметров в од­ном запросе. Когда запрос выполняется, программа Access отображает отдельное диалоговое окно Введите значение параметрадля каждого значения. Если у вас несколько параметров, вам придется сопровождать выполнение запроса щелчками мышью в назойливых диалоговых окнах.

 

 

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

Однако параметры запроса не следует применять для решения повседневных задач, ка­сающихся ввода данных (таких как обновление единственной записи о клиенте). Формы, которые вы начнете создавать в части IV, предоставляют гораздо больше возможностей для просмотра и корректировки информации.


Глава 8



ROOT"]."/cgi-bin/footer.php"; ?>