通过下面3个实例代码来理解 LOOP GROUP BY

例子1
测试代码及运行结果如下

REPORT ZENG_T01.
TYPES:
  BEGIN OF struct,
    key1 TYPE string,
    key2 TYPE string,
    col      TYPE i,
  END OF struct,
  itab TYPE STANDARD TABLE OF struct WITH EMPTY KEY.

DATA(itab) = VALUE itab(
  ( key1 = `a` key2 = `a` col = 1 )
  ( key1 = `a` key2 = `b` col = 2 )
  ( key1 = `a` key2 = `a` col = 3 )
  ( key1 = `a` key2 = `a` col = 4 )
  ( key1 = `a` key2 = `b` col = 5 )
  ( key1 = `b` key2 = `a` col = 6 )
  ( key1 = `b` key2 = `a` col = 7 )  ).

LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>)
             GROUP BY ( key1 = <wa>-key1 key2 = <wa>-key2 ).
  cl_demo_output=>write( <wa> ).
ENDLOOP.

cl_demo_output=>display( ).

运行输出结果如下

SAP ABAP新语法之LOOP GROUP BY_实例代码


例子2

测试代码及运行结果如下

REPORT ZENG_T02.
TYPES:
  BEGIN OF struct,
    key1 TYPE string,
    key2 TYPE string,
    col      TYPE i,
  END OF struct,
  itab TYPE STANDARD TABLE OF struct WITH EMPTY KEY.

DATA(itab) = VALUE itab(
  ( key1 = `a` key2 = `a` col = 1 )
  ( key1 = `a` key2 = `b` col = 2 )
  ( key1 = `a` key2 = `a` col = 3 )
  ( key1 = `a` key2 = `a` col = 4 )
  ( key1 = `a` key2 = `b` col = 5 )
  ( key1 = `b` key2 = `a` col = 6 )
  ( key1 = `b` key2 = `a` col = 7 )  ).

LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>)
             GROUP BY ( key1 = <wa>-key1 key2 = <wa>-key2 )
             WITHOUT MEMBERS  
             REFERENCE INTO DATA(group_key).
  cl_demo_output=>write( group_key->* ).
ENDLOOP.

cl_demo_output=>display( ).

运行输出结果如下:

SAP ABAP新语法之LOOP GROUP BY_ABAP_02


例子3

测试代码及运行结果如下

REPORT ZENG_T03.
TYPES t_itab TYPE TABLE OF i WITH EMPTY KEY.
TYPES: BEGIN OF TY_EMPLOYEE,
         NAME TYPE CHAR30,
         ROLE TYPE CHAR30,
         AGE  TYPE I,
       END OF TY_EMPLOYEE,
       TY_EMPLOYEE_T TYPE STANDARD TABLE OF TY_EMPLOYEE WITH KEY NAME.
DATA(GT_EMPLOYEE) = VALUE TY_EMPLOYEE_T(
( NAME = 'Mao'         ROLE = 'ABAP guru'       AGE = 29 )
( NAME = 'Zhangjie'    ROLE = 'FI Consultant'   AGE = 33 )
( NAME = 'Hujianchun'  ROLE = 'ABAP guru'       AGE = 37 )
( NAME = 'XiaoLiu'     ROLE = 'FI Consultant'   AGE = 31 )
( NAME = 'Xiuxianhai'  ROLE = 'ABAP guru'       AGE = 30 )
( NAME = 'Huangping'   ROLE = 'SD Consultant'   AGE = 42 ) ).

DATA: P_MENGE0 TYPE I.
DATA: P_MENGE2 TYPE I.

"Loop with grouping on Role  1
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:P_MENGE0 .

  LOOP AT GROUP <GROUP> ASSIGNING FIELD-SYMBOL(<LS_MEMBER>).
    P_MENGE0 = P_MENGE0 + <LS_MEMBER>-AGE.

  ENDLOOP.
  WRITE:/  P_MENGE0.
  CLEAR P_MENGE0.
ENDLOOP.

"Loop with grouping on Role  2
LOOP AT GT_EMPLOYEE INTO DATA(LS_EMPLOYEE01)
  GROUP BY ( ROLE  = LS_EMPLOYEE01-ROLE ) INTO DATA(KEY2).
  CLEAR:P_MENGE2 .
  LOOP AT GROUP KEY2 INTO DATA(MEMBER2).
    P_MENGE2 = P_MENGE2 + MEMBER2-AGE.
  ENDLOOP.
  WRITE:/ P_MENGE2.
  CLEAR P_MENGE2.
ENDLOOP.

运行输出结果如下:

SAP ABAP新语法之LOOP GROUP BY_实例代码_03