- •Часть 2
- •Часть 2
- •Содержание
- •1. Конструктор запросов 4
- •2. Запрос на выборку. 13
- •1. Конструктор запросов
- •Создание выражений с помощью Построителя выражений
- •2. Запрос на выборку.
- •2.1. Запрос, основанный на одной таблице и использующий простое условие
- •2.2. Простая выборка из двух связанных таблиц.
- •2.3. Запрос, использующий вычисляемые поля
- •2.4. Запрос с группировкой
- •2.5. Запрос, использующий связь таблицы с самой собой (рекурсивное соединение)
- •2.6. Запрос, использующий две ссылки на одну таблицу
- •2.7. Выборка повторяющихся записей
- •2.8. Поиск несовпадающих записей
- •2.9. Другие сведения, полезные при разработке запросов
- •3. Запрос на удаление записей.
- •3.1. Запрос на удаление всех записей из таблицы (очистка таблицы)
- •3.2. Запрос на удаление с ограничением числа удаляемых записей
- •3.3. Запрос на удаление с применением внешнего объединения таблиц
- •4. Запрос на добавление записей в существующую таблицу
- •4.1. Запрос на добавление записей во временную таблицу текущей базы данных
- •4.2. Запрос на добавление записей во временную таблицу внешней базы данных
- •5. Запрос на обновление записей в таблице.
- •5.1. Простой запрос на обновление записей
- •5.2. Запрос на обновление полей нескольких связанных таблиц.
- •6. Запросы на объединение.
- •6.1. Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.
- •7. Перекрестные запросы
- •7.1. Создание перекрестного запроса при помощи мастера
- •7.2. Сознание перекрестного запроса при помощи конструктора запросов
- •8. Запросы с параметрами
- •9. Подчиненные запросы
- •9.1. Использование подчиненных запросов в выражениях для условий отбора записей
- •9.2. Использование подчиненных запросов в определении полей основного запроса.
- •10. Свойства полей запросов
- •11. Свойства запросов
7. Перекрестные запросы
Перекрестные запросы являются еще одной специфической разновидностью запросов на выборку. Предназначены они для более глубокого анализа информации, хранящейся в таблицах. Ключевым словом SQL-оператора перекрестного запроса, задающим его тип, является слово TRANSFORM (преобразовать). Это подразумевает, что значения одного из столбцов (полей) выборки, будут преобразованы в названия столбцов итоговой выборки. Результаты перекрестного запроса группируются по двум наборам данных, один из которых расположен в левом столбце (столбцах) таблицы, а второй — в верхней строке. В остальном пространстве таблицы отображаются результаты статистических расчетов (Sum, Count и т.д.), выполненных над данными трансформированного поля.
Рассмотрим пример. На рис. 7.1. изображен перекрестный запрос Квартальные обороты по товарам учебной базы данных Борей, открытый в режиме просмотра. Слева в таблице расположены поля Марка из таблицы Товары, КодКлиента из таблицы Заказы и ГодЗаказа, вычисляемое на основе поля Дата Размещения таблицы Заказы. На основе этого последнего поля вычисляются и значения квартала размещения заказа (Кв 1, Кв 2, Кв 3 или Кв 4). Эти значения и являются заголовками столбцов, в которых приведена суммарная стоимость размещенных заказов по кварталам и по клиентам.
Рис. 7.1. Перекрестный запрос Квартальные обороты по товарам.
Перекрестные запросы можно создавать как при помощи мастера, так и с нуля, в режиме конструктора запросов.
Следует отметить чрезвычайную медлительность при запуске перекрестных запросов в режиме таблицы. Особенно это заметно, когда они используются в качестве источника данных для форм, отчетов или диаграмм.
7.1. Создание перекрестного запроса при помощи мастера
Допустим, необходимо проанализировать размещение заказов у клиентов помесячно за 1998 год. Для такого анализа перекрестный запрос подходит как нельзя лучше. На примере создания этого запроса будет проиллюстрирована работа соответствующего мастера.
Прежде всего, необходимо создать вспомогательный запрос на выборку, содержащий все необходимые поля. Это нужно сделать, поскольку нужны поля из двух связанных таблиц, а мастер может предложить вам выбрать только одну таблицу (или запрос). Создайте новый запрос и откройте его в режиме конструктора. Добавьте в его макет таблиц Заказы и Заказано. Microsoft Access автоматически добавит постоянную связь между таблицами по полям КодЗаказа. В бланк запроса добавьте поле КодКлиента из таблицы Заказы. Для следующих двух полей введите такие определения: Месяц: Month([ДатаРазмещения]) и Стоимость:CCur([Заказано].[Цена]* [Количество] *(1-[Скидка])/100)*100. Теперь добавьте в бланк запроса поле ДатаРазмещения из таблицы Заказы, снимите для него флажок Вывод на экран и введите Условие отбора— Between #01.01.98# And #31.12.98#. Закройте получившийся запрос, сохранив его под каким-либо именем (Запрос 5). Вид запроса в режиме конструктора приведен на рис. 7.2.
Рис. 7.2. Вспомогательный запрос, отбирающий записи из таблицы Заказы и Заказано.
Теперь можно приступить к созданию перекрестного запроса. На вкладке Запросы нажмите кнопку Создать и из появившегося списка выберите пункт Перекрестный запрос. На экране появится первое окно мастера создания перекрестных запросов (см. рис. 7.3). Выберите значение Запросы для переключателя Показать, в списке запросов укажите имя созданного перед этим запроса на выборку (Запрос 5) и нажмите кнопку Далее.
Рис 7.3. Первое окно мастера перекрестных таблиц
Второе окно мастера (см. рис. 7.4) предоставляет возможность выбрать поля, значения которых будут использоваться в качестве заголовков строк (то есть, будут приведены в левой части запроса в режиме таблицы). Можно указать не более трех полей. Для нашего запроса необходимо выбрать в списке доступных полей поле КодКлиента и нажать кнопку со стрелкой вправо, после чего поле будет помещено в список выбранных полей. Нажмите кнопку Далее, чтобы перейти к третьему окну мастера.
Рис. 7.4. Второе окно мастера перекрестных таблиц
В третьем окне (см. рис. 7.5) из списка доступных на текущий момент полей необходимо выбрать поле, значения которого будут являться заголовками столбцов. Такое поле может быть выбрано только одно. В данном случае необходимо выбрать поле Месяц и нажать кнопку Далее.
Рис. 7.4. Третье окно мастера перекрестных таблиц
Четвертое окно мастера создания перекрестных запросов (см. рис. 7.5) позволяет задать необходимые вычисления над доступными полями, результаты которых будут помещены в столбцы, задаваемые трансформируемым полем (область данных). На этом шаге доступно только одно поле — Стоимость. Задайте для него функцию — Сумма (Sum) и нажмите кнопку Далее.
Рис. 7.5. Четвертое окно мастера перекрестных таблиц
Последнее окно мастера позволяет задать имя запроса, а также выбрать вариант поведения мастера на завершающей стадии проектирования — открыть запрос в режиме конструктора или в режиме таблицы. Можно, кроме того, указать, нужна ли вам справка по работе с перекрестной таблицей. Задайте необходимые опции и нажмите кнопку Готово. Получившийся запрос изображен на рис. 7.6.
|
|
Рис. 7.6. Перекрестный запрос, созданный при помощи мастера
Пояснения
а). Мастер построения перекрестных запросов может использовать данные только одной таблицы или запроса. Для того чтобы включить в итоговый запрос информацию из нескольких связанных между собой таблиц (запросов), мы вначале создали обычный запрос на выборку, содержащий все необходимые поля, и использовали его в качестве источника данных для конструирования перекрестного запроса при помощи мастера.
б). В перекрестных запросах всегда используются групповые операции, и отключить их нельзя — соответствующая кнопка на панели инструментов и пункт меню недоступны.
в). В бланке перекрестных запросов, в отличие от обычных запросов на выборку, присутствует строка Перекрестная таблица. В этой строке указываются значения, задающие роль для полей, использующихся в запросе. Возможные значения следующие: Заголовки строк, Заголовки столбцов, Значение и (не отображается).
г). Во вспомогательном запросе на выборку использовалась одна из функций для работы с данными типа Дата/Время - функция Month.
д). Конструкции SQL-onepamopa.
В перекрестном запросе в инструкции SELECT, перечисляются поля, являющиеся Заголовками строк.
В инструкции PIVOT указывается поле, значения которого будут служить в качестве заголовков столбцов.
Инструкция TRANSFORM служит для указания поля, значения которого, после произведенной групповой операции (Sum, Count и т.д.), будут помещены справа от полей перечисленных в инструкции SELECT.
