Способы группировки в ABAP: 3 + 1 способ
При обработке данных иногда требуется сгруппировать данные и посчитать какое-либо агрегированное значение (MAX, MIN, AVG, SUM, COUNT и другие). Традиционно, такие функции реализуются в SQL; однако и на сервере приложений приходится выполнять такие вычисления.
В ABAP имеется 3 стандартных способа (встроенных) для группировки с последующим вычислением агрегированных значений, а именно:
- Группировка с помощью ключей сортированной таблицы.
- Группировка с помощью относительного недавно введенного оператора GROUP BY (в том числе GROUP BY without MEMBERS)
- Группировка с помощью операторов AT ENDAT.
Давайте рассмотрим на примере вычисления максимального значения (поле BUDAT) из внутренней таблицы эти способы.
Пусть у нас имеется таблица (полный код доступен по ссылке).
Рис. 1 Начальное заполнение внутренней таблицы
Сортированная таблица (SORTED TABLE)
Группировка с помощью сортированной таблицы выполняется просто: создаётся сортированная таблица с уникальным ключом, равным ключам группировки. А затем выполняется нужная агрегированная функция. Однако в нашем примере нам нужно найти максимальное значение поля BUDAT для каждой полученной группы, и мы можем заранее подготовить данные так, что максимальное значение уже будет подготовленно: а именно предварительно отсортировать данные, сделав первую запись с наибольшей датой.
Рис. 2 Группировка с максимальной датой с помощью сортировки
Результат будет таким:
Рис. 3 Результат группировки
Этот способ является лаконичным, наглядным и надежным: ключи задаются явно, контролируются компилятором, и сортированные таблицы уже существуют много десятилетий (то есть достаточно оптимизированным) (полный код доступен по ссылке).
Группировка с помощью GROUP BY
GROUP BY – относительно новый (и долгожданный оператор в ABAP. Справка к нему доступна. Даёт разные возможности по группировки данных. Принцип работы: «внутри» создаётся объект «группа» и затем с помощью этого объекта можно обрабатывать группу и каждую запись внутри группы. При этом можно передавать как полную строку, так и только ключи (для целей производительности). Давайте рассмотрим пример (полный код доступен по ссылке). (!!!) Объект группы нельзя передавать в качестве параметра другим code-unit и зачастую это «портит картину»; особенно когда нужно использовать несколько функций для агрегированного значения; а также нельзя менять порядок строк и ключи в исходной таблице.
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти