LOOP GROUP BY 分組迴圈的使用方法小栗子
阿新 • • 發佈:2022-05-28
原文連結:https://blog.csdn.net/lmf496891416/article/details/111317377
1.格式:
LOOP AT 內表 INTO DATA(工作區) GROUP BY ( 欄位 = 工作區-欄位 size = GROUP SIZE "分組組數-- index = GROUP INDEX ) "分組的組序號 ASCENDING ASSIGNING FIELD-SYMBOL(<組>).LOOP AT GROUP <組> ASSIGNING FIELD-SYMBOL(<指標>). "對指標進行操作,和普通的loop迴圈相似 ENDLOOP. ENDLOOP.
2.簡而言之:就是第一個loop迴圈是把內表進行分組,第二loop迴圈是把組裡的資料迴圈讀出來進行修改判斷等操作。
3.可以替代AT END OF /AT NEW OF。
4.具體例項-複製就能用
TYPES: BEGIN OF ty_employee, name TYPE char30, role TYPE char30, ageTYPE i, sex TYPE char10, END OF ty_employee, ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name. "對內表進行賦值" DATA(gt_employee) = VALUE ty_employee_t( ( name = 'John' role = 'ABAP guru' age = 34 sex = 'MAN' ) ( name = 'Alice' role = 'FI Consultant' age = 42 sex = 'WOMAN' ) ( name = 'Barry' role = 'ABAP guru' age = 54 sex = 'WOMAN' ) ( name = 'Mary' role = 'FI Consultant' age = 37 sex = 'WOMAN' ) ( name = 'Arthur' role = 'ABAP guru' age = 34 sex = 'MAN' ) ( name = 'Mandy' role = 'SD Consultant' age = 64 sex = 'MAN' ) ). DATA: gv_tot_age TYPE i, gv_avg_age TYPE decfloat34. "通過角色進行分組" LOOP AT gt_employee INTO DATA(ls_employee) GROUP BY ( role = ls_employee-role size = GROUP SIZE "分組組數" index = GROUP INDEX ) "分組的組序號" ASCENDING ASSIGNING FIELD-SYMBOL(<group>). CLEAR: gv_tot_age. WRITE: / | 組序號: { <group>-index } 角色: { <group>-role WIDTH = 15 }| & | 這個組有幾條資料: { <group>-size } |. "loop迴圈組,將組裡的資料讀出來" LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>). gv_tot_age = gv_tot_age + <ls_member>-age. WRITE: /13 <ls_member>-name . ENDLOOP. gv_avg_age = gv_tot_age / <group>-size. WRITE: / |組平均年齡: { gv_avg_age }|. SKIP. ENDLOOP.
例項最終結果圖: