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.