Иллюстрированный самоучитель по Access 2002

       

Перекрестные запросы


Перекрестные запросы —

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

возможностью обработки значительного объема данных и вывода их в формате, который очень хорошо подходит для автоматического создания графиков и диаграмм;

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

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

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

в гл. 13.

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

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

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

Создайте новый запрос в режиме Конструктора и добавьте в него таблицы "Товары" (Products), "Заказы" (Orders) и "Заказано" (Order Details).

Перетащите поля "КодТовара" (ProductlD) и "Марка" (ProductName) таблицы "Товары", а затем поле "ДатаРазмещения" (OrderedDate) таблицы "Заказы" в первые три столбца бланка запроса.




Выберите команду меню



Запрос, Перекрестный


(Query, Crosstab Query). Заголовок окна запроса



Запрос1:на выборку


(Query1:Select Query) изменится на

Запрос!перекрестный запрос


(Queryl:Crosstab Query). Кроме того, в бланк запроса будут добавлены строки

Перекрестная таблица


(Crosstab) и

Групповая операция


(Total), в которую во всех столбцах автоматически вводится операция

Группировка



(Group By).

Выберите в списке ячейки



Перекрестная таблица


столбца "КодТовара" значение

Заголовки строк


(Row Heading). Выполните то же самое для столбца "Марка". Эти столбцы являются требуемыми заголовками строк перекрестной таблицы.

Выберите в списке ячейки



Групповая операция


столбца "ДатаРазмещения" значение

Условие



(Where). В ячейке

Условие отбора


(Criteria) этого столбца введите выражение <=#31.12.97# And >=#01.01.97# для вывода в перекрестной таблице данных за 1997 год.

Установите курсор в ячейку

Поле


(Field) следующего (пустого) столбца и введите выражение:

Объем продаж: Sum([Количество]*[Заказано].[Цена])

Это будет поле, значение которого вычисляется с помощью описанного выражения, а название поля — "Объем продаж". В выражении используются поля из таблиц, которые включены в запрос, однако обратите внимание, что сами поля в результат запроса не включены. Это означает, что при создании вычисляемого поля в выражение можно включать ссылки не только на поля самого запроса, но и на поля, которые не включаются в результат запроса. Важно, чтобы они были в исходных таблицах. При ссылке на поле "Цена" в выражении мы указали еще имя таблицы "Заказано", а при ссылке на поле "Количество" не указывали. Указать имя таблицы пришлось потому, что поле с именем "Цена" присутствует и в таблице "Товары" и в таблице "Заказано". Если не указать в выражении имени таблицы, Access не сможет определить, из какой таблицы брать значения, поэтому при выполнении запроса выдаст сообщение об ошибке, как это представлено на рис. 8.13.




Содержание раздела