Запросы в СУБД Paradox. Формирование запросов для типичных случаев, страница 5

+-------------+---------+----------¦

¦ Иностранный ¦ Пр.зан. ¦     30   ¦

¦   язык      ¦         ¦          ¦

+-------------+---------+----------¦

¦ Физкультура ¦ Пр.зан. ¦     60   ¦

+-------------+---------+----------+

¦ Программиров¦ Лекции  ¦     40   ¦

+-------------+---------+----------¦

¦ Программиров¦ Пр.зан. ¦     20   ¦

+-------------+---------+----------¦

¦ Программиров¦ Лаб.раб.¦     40   ¦

+-------------+---------+----------¦

¦ Программиров¦ Конс.   ¦      4   ¦

+-------------+---------+----------¦

¦ Программиров¦ Экз.    ¦     15   ¦

+----------------------------------+

             Рисунок 6а.13

таблицу CrossTab, представленную на рисунке 6а.14.

¦----------------------------------------------------------------+

¦    Disc         ¦ Пр.зан. ¦ Лекции.¦ Лаб.раб.¦Конс.¦ ...  ¦Экз.¦

+-----------------+---------+--------+---------+-----+------+----¦

¦Иностранный язык ¦   30    ¦        ¦         ¦     ¦      ¦    ¦

+-----------------+---------+--------+---------+-----+------+----¦

¦Физкультура      ¦   60    ¦        ¦         ¦     ¦      ¦    ¦

+-----------------+---------+--------+---------+-----+------+----¦

¦Программирование ¦   20    ¦   40   ¦   40    ¦  4  ¦      ¦ 15 ¦

+----------------------------------------------------------------+

Рисунок 6а.14

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

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

В таблице CrossTab формируется столько столбцов, сколько различных значений содержится в поле для меток колонок. Если требуется свести все к таблице с заданной структурой, для которой, например, создана экранная форма, можно применить прием с добавлением вспомогательной таблицы с записями, порядок которых определит последовательность колонок во временной таблице CrossTab. Пусть в частности, в рассматриваемом выше примере колонки должны образовывать последовательность: "Лекции", "Пр.зан.", "Лаб.раб.", "Конс.", "Экз.". Это можно реализовать предварительно добавив с помощью услуги Tools\More\Add таблицу, представленную на рис. 6а.15 к таблице Tab1, а затем исключив из полученной таблицы CrossTab строку, начинающуюся с пустого поля в колонке Disc.

Tab2

+----------------------------------+

¦ Дисциплина  ¦Вид занят¦    Объем ¦

¦-------------+---------+----------¦

¦  Disc*      ¦  Vz*    ¦     Q    ¦

+-------------+---------+----------¦

¦             ¦ Лекции  ¦     0    ¦

¦             ¦         ¦          ¦

+-------------+---------+----------¦

¦             ¦ Пр.зан. ¦     0    ¦

+-------------+---------+----------+

¦             ¦ Лаб.раб.¦     0    ¦

+-------------+---------+----------¦

¦             ¦ Конс.   ¦     0    ¦

+-------------+---------+----------¦

¦             ¦ Экз.    ¦     0    ¦

+----------------------------------+

             Рисунок 6а.15

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