1. 程式人生 > 其它 >LOOP GROUP BY 分組迴圈的使用方法小栗子

LOOP GROUP BY 分組迴圈的使用方法小栗子

原文連結: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,
         age  
TYPE 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.

例項最終結果圖: