Группировка соответствует секции GROUP BY SQL-запроса. Она позволяет переложить на SQL-сервер всю работу по обработке информации, передавая на клиентский компьютер только результат. Эта возможность необходима при обработке больших объемов информации (десятков и сотен тысяч записей).
В списке полей указываются те поля и выражения, по которым осуществляется группировка. Они помечаются значком «G».
После того, как отобраны поля и выражения, по которым осуществляется группировка, необходимо создать выражения, содержащие агрегатные функции
·сумма SUM( … )
·минимальное значение MIN( … )
·максимальное значение MAX( … )
·отклонение (STDEV)
·отклонение выборки (STDEVP)
·вариация (VAR)
·вариация выборки (VARP)
и др.
Примечание: поля, у которых признак группировки не включен, не попадают в запрос. Они могут использоваться только в качестве фильтров.
Пример
В качестве примера рассмотрим запрос Талоны с разбивкой по типу (рис. 2.3.6). В этом запросе нужно получить количество ОМС- и ДМС-талонов, а также количество пациентов в талонах с разбивкой по отделениям.
На закладке Таблицы и условия выбора выбирается основная таблица запроса – Талоны. Так как нужно получить разбивку по отделениям, выбирается связанная с ней таблица Отделение (Отделения) (рис. 2.3.6).
Рисунок 2.3.6. Формирование запроса "Талоны с разбивкой по типу": выбор таблиц
На закладке Запрашиваемые данные (рис. 2.3.7) в запрос добавляются:
·поля таблицы Талоны — Дата талона и Прейскурант,
·поля таблицы Отделения — Код Отделения и Отделение.
Рисунок 2.3.7. Формирование запроса "Талоны с разбивкой по типу": выбор полей
Устанавливается фильтр по дате талона.
По полям Код отделения, Отделение, Прейскурант устанавливается группировка.
Поскольку нужно разделять талоны по прейскуранту (ОМС, ДМС), создается выражение Тип талона. Выражение в данном случае нужно для того, чтобы вместо значения поля-выборки INSURANCE_TYPE прописывалось "ДМС" или "ОМС" (это будет необходимо при настройке вида отчета — см. Вычислимые поля и авторазмножающиеся колонки). По этому выражению также производится группировка. Текст выражения:
%IF( FM_BILL.INSURANCE_TYPE='D', 'ДМС','ОМС' )
Для того чтобы получить количество талонов, выбирается поле FM_BILL_ID и по нему ставится счетчик, что соответствует функции COUNT (рис. 2.3.8).
Рисунок 2.3.8. Создание счетчика по полю
Для получения количества пациентов нельзя воспользоваться просто счетчиком по полю PATIENTS_ID, поскольку на одного пациента может быть создано несколько талонов, и в таком случае выражение COUNT(FM_BILL.PATIENTS_ID) вернет количество талонов; поэтому создается выражение Кол-во пациентов (рис. 2.3.9), в котором прописывается
COUNT (DISTINCT FM_BILL.PATIENTS_ID)
Оператор DISTINCT позволяет получить количество уникальных значений PATIENTS_ID. Тип агрегации в этом случае – ручная.
Рисунок 2.3.9. Выражение с ручной агрегацией
Результат запроса показан на рис. 2.3.10.
Рисунок 2.3.10. Результат запроса с группировкой и агрегатными функциями