Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_2007.doc
Скачиваний:
257
Добавлен:
17.03.2015
Размер:
20.6 Mб
Скачать

Для тех, кто понимает. Создание запроса с объединением для лучшей группировки

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

Самый легкий способ создания сводного запроса (такого как перекрестный) — формирование еще одного запроса, в котором есть вся нужная вам информация.

В этом новом запросе используются операции объединения (см. разд. "Запросы и свя­занные таблицы" главы 6) для соединения всех таблиц с необходимыми данными. Затем можно использовать этот запрос для построения сводного. Такой подход особенно поле­зен в случае перекрестных запросов, поскольку мастер создания перекрестного запроса способен использовать только одну таблицу или запрос. Он самостоятельно не может объединить таблицы.

В БД AdventureWorks есть запрос OrderedItems, который формирует основу для всех перекрестных запросов, которые вы видели до сих пор. Запрос OrderedItems получает все товары, приобретенные во всех когда-либо сделанных заказах (из таблицы SalesOrderDetails), и затем использует объединения для извлечения дополнительной инфор­мации из таблиц SalesOrderHeader (представляющей заказ целиком), Customers, Products, Store и ShipMethod. Вам придется выполнить несколько переходов для полу­чения данных об адресе клиента, которые позволят проследить, как объемы продаж рас­пределены в разных городах, штатах и странах. (Этот запрос можно изучить, загрузив БД AdventureWorks со страницы "Missing CD" Web-сайта www.missingmanuals.com.)

Создание перекрестного запроса с помощью мастера

Легче всего построить перекрестный запрос с помощью мастера создания перекрестного запроса. Если вы хотите сделать это самостоятельно, выполните следующие действия, поль­зуясь БД AdventureWorks.

1. Если нужно собрать информацию из связанных таблиц, начните с создания запроса с объединением (join query).

В данном примере используется уже созданный запрос Orderedltem с объединением таблиц, заимствующий массу данных о компонентах заказов, соответствующих товарах, клиентах, месте их проживания и т. д. Дополнительные сведения, необходимые для са­мостоятельного создания запроса с объединением, см. в разд. "Запросы и связанные таб­лицы" главы 6.

Если вы считаете, что можете получить все необходимое из одной таблицы, пропустите этот пункт.

2. Выберите на ленте Создание Другие Мастер запросов (Create Other Query Wizard).

Теперь начинает действовать чудесный мастер. На экране появляется окно Создание за­проса (New Query) со списком запросов разных типов, которые может создать мастер.

3. Выберите Перекрестный запрос (Crosstab Query Wizard) и щелкните мышью кнопку ОК.

Сначала мастер попросит выбрать таблицу или запрос (рис. 9.4). Выберите один из пере­ключателей в области Показать (View).

4. Выберите нужную таблицу. Если хотите выбрать запрос, щелкните кнопкой мыши переключатель Запросы, а затем выберите ваш запрос. Щелкните мышью кнопку Далее.

В данном примере следует щелкнуть мышью переключатель Запросы и затем выбрать запрос OrderedItems.

На следующем этапе нужно задать критерии группировки, которые будут применяться для объединения данных в строки (рис. 9.5).

Рис.9.4. Для просмотра таблиц вашей БД щелкните кнопкой мыши переключатель Таблицы, а для просмотра запросов — Запросы

Рис. 9.5. Для применения поля в качестве заголовка строки выберите его в списке Доступные поля и затем щелкните мышью забавную кнопку > для переноса поля в список Выбранные поля

Если создается простой двухуровневый перекрестный запрос, выберите один критерий для строк и один для столбцов (на следующем шаге). Но есть возможность задать до трех уровней группировки строк. Этот вариант больше всего подходит для разных уровней, связанных между собой. Например, вы можете выбрать группировку по стране прожива­ния клиента, в каждой стране подгруппу для городов и в каждом городе подгруппу на ос­нове идентификационного номера (ГО) клиента. Пример хорошо сгруппированного пе­рекрестного запроса см. на рис. 9.2.

5. Включите поля, которые хотите использовать, в список Выбранные поля и затем щелк­ните мышью кнопку Далее.

Впримере с запросомOrderedltems строки группируются по полю State Province. После того как вы опробуете свой запрос, группировку можно легко изменить в окне Конструктора. Например, если хотите, можно поменять поле StateProvince на поле Country. Как изменить перекрестный запрос, рассказывается в разд. "Создание перекрестного за­проса с нуля " далее в этой главе.

Теперь следует задать критерий группировки, применяемый для разделения ваших строк на столбцы (рис. 9.6). В этот момент можно выбрать одно поле.

Рис. 9.6. По мере выполнения мастера программа Access выводит в нижней части его окна мини-окно предварительного просмотра структуры вашего находящегося в процессе создания перекрестного запроса. В данном примере строки группируются по полю StateProvince, а столбцы — по полю ProductCategory

6. Выберите поле для группировки столбцов и щелкните мышью кнопку Далее. В данном примере это поле ProductCategory.

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

Выберите поле для вычисления и затем функцию для подсчета сводных данных (рис. 9.7).Например, можно найти самую дешевую продажу, заказ с наибольшим числом продан­ных товаров, среднюю цену товара и т. д. В данном примере для подсчета количества проданных товаров используется поле OrderQty.

Рис. 9.7. В этом примере функция Sum суммирует значения поля OrderQty из всех записей. Например, данный запрос сообщает о том, что вы продали в целом 53 товара из категории Bike (велосипеды) клиентам из Алабамы. Если нужно посчитать, сколько заказов сделали ваши клиенты (вместо количества доставленных товаров), необходим немного другой запрос — в этом случае следует использовать функцию Count для подсчета различных значений поля SalesOrderID

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]