ABAP 7.4 Loop group by语法(分组处理数据)
  RdEelXhuDp09 2023年12月07日 23 0


1. 按照单个字段分组处理数据

  • 效果(根据CARRID被分成两组)
  • 方式一(正序)
  • 方式二(倒序)
  • 代码
DATA: lt_table     TYPE TABLE OF spfli,
      lt_table_tmp TYPE TABLE OF spfli,
      wa_table     TYPE spfli.

SELECT * FROM spfli
INTO TABLE lt_table UP TO 5 ROWS.

"方法一
LOOP AT lt_table INTO wa_table GROUP BY wa_table-carrid ASCENDING ASSIGNING FIELD-SYMBOL(<key1>).

  LOOP AT GROUP <key1> ASSIGNING FIELD-SYMBOL(<key1_member>).
    APPEND <key1_member> TO lt_table_tmp.          "处理单行数据
  ENDLOOP.

  cl_demo_output=>display( lt_table_tmp ).        "处理组数据
  CLEAR lt_table_tmp.
ENDLOOP.

"方法二
LOOP AT lt_table INTO wa_table GROUP BY ( key1 = wa_table-carrid ) DESCENDING ASSIGNING FIELD-SYMBOL(<key2>).

  LOOP AT GROUP <key2> ASSIGNING FIELD-SYMBOL(<key2_member>).
    APPEND <key2_member> TO lt_table_tmp.          "处理单行数据
  ENDLOOP.

  cl_demo_output=>display( lt_table_tmp ).        "处理组数据
  CLEAR lt_table_tmp.
ENDLOOP.

2. 按照多个个字段分组处理数据

  • 效果(根据CARRID&CONNID被分成五组)
  • 代码:
DATA: lt_table     TYPE TABLE OF spfli,
      lt_table_tmp TYPE TABLE OF spfli,
      wa_table     TYPE spfli.

SELECT * FROM spfli
INTO TABLE lt_table UP TO 5 ROWS.

"多个Key字段
LOOP AT lt_table INTO wa_table GROUP BY ( key1 = wa_table-carrid key2 = wa_table-connid ) ASCENDING ASSIGNING FIELD-SYMBOL(<key3>).

  LOOP AT GROUP <key3> ASSIGNING FIELD-SYMBOL(<key3_member>).
    APPEND <key3_member> TO lt_table_tmp.          "处理单行数据
  ENDLOOP.

  cl_demo_output=>display( lt_table_tmp ).        "处理组数据
  CLEAR lt_table_tmp.
ENDLOOP.

3. GROUP INDEX & GROUP SIZE用于记录当前分组的索引和当前组的成员数量

  • 效果
  • 第一组有26条数据
  • 第二组有52条数据
  • 代码
DATA: lt_table     TYPE TABLE OF sflight,
      lt_table_tmp TYPE TABLE OF sflight,
      wa_table     TYPE sflight.

SELECT * FROM sflight
INTO TABLE lt_table UP TO 100 ROWS WHERE carrid IN ('AA','AZ').

LOOP AT lt_table INTO wa_table GROUP BY ( key1 = wa_table-carrid indx = GROUP INDEX size = GROUP SIZE ) ASCENDING ASSIGNING FIELD-SYMBOL(<key4>).

  LOOP AT GROUP <key4> ASSIGNING FIELD-SYMBOL(<key4_member>).
    APPEND <key3_member> TO lt_table_tmp.          "处理单行数据
  ENDLOOP.

  cl_demo_output=>display_text( |{ <key4>-indx } { <key4>-size }| ).
  cl_demo_output=>display( lt_table_tmp ).        "处理组数据
  CLEAR lt_table_tmp.
ENDLOOP.


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
RdEelXhuDp09