FIELD-SYMBOLS : <lfs_sales> TYPE ty_sales.
Предполагается, что li_sales является внутренней таблицей со столбцами Sales_employee, Customer и customer_count. Первоначально записи в таблице представлены следующим образом.
Sales_employee Customer customer_count
a 1 0
a 2 0
b 3 0
b 2 0
b 4 0
c 1 0
Нам нужно рассчитать дубликат количества sales_employee и обновить поле customer_count. Мы можем использовать оператор сбора, как это предложено Дириком, или использовать операторы контроля прерывания, как показано ниже.
Обязательным условием для использования ключевого слова SUM является инициализация customer_count как 1 в каждой строке, чтобы он мог суммировать количество клиентов на основе аналогичного sales_employee.
LOOP AT li_sales ASSIGNING <lfs_sales>.
<lfs_sales>-customer_count = 1.
ENDLOOP.
Теперь записи выглядят так, как показано ниже.
Sales_employee Customer customer_count
a 1 1
a 2 1
b 3 1
b 2 1
b 4 1
c 1 1
Следующий код обновляет значение поля customer_count.
LOOP AT li_sales INTO rec_sales.
AT END OF employee.
SUM.
MOVE-CORRESPONDING rec_sales TO rec_count.
APPEND rec_count TO li_count.
CLEAR rec_count.
ENDAT.
ENDLOOP.
SORT li_count BY employee.
LOOP AT li_sales ASSIGNING <lfs_sales>.
CLEAR rec_count.
READ TABLE li_count INTO rec_count
WITH KEY employee = <lfs_sales>-employee
BINARY SEARCH.
IF sy-subrc IS INITIAL.
<lfs_sales>-count = rec_count-count.
ENDIF.
ENDLOOP.
Теперь внутренней таблице присваивается значение customer_count, как показано ниже.
Sales_employee Customer customer_count
a 1 2
a 2 2
b 3 3
b 2 3
b 4 3
c 1 1