SAP ABAP新语法之LOOP GROUP BY

通过下面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( ).

运行输出结果如下

在这里插入图片描述
例子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( ).

运行输出结果如下:
在这里插入图片描述
例子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.

运行输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ERP文库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值