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.