Internal Table Grouping - Complete Reference
Source: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/11_Internal_Tables_Grouping.md
Basic Grouping
Single Column Grouping
" Representative binding (work area represents group)
LOOP AT spfli_tab INTO wa GROUP BY wa-carrid.
... wa-carrid ...
ENDLOOP.With Member Loop
LOOP AT spfli_tab INTO wa GROUP BY wa-carrid.
LOOP AT GROUP wa INTO DATA(member).
... member-... ...
ENDLOOP.
ENDLOOP.Multiple Column Grouping
Structured Group Key
LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom ).
... wa-carrid ... wa-airpfrom ...
ENDLOOP.Explicit Group Key Binding
Single Column
LOOP AT spfli_tab INTO wa
GROUP BY wa-carrid
INTO DATA(key).
... key ...
ENDLOOP.Multiple Columns
LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom )
INTO DATA(key).
... key-key1 ... key-key2 ...
ENDLOOP.Group Metadata
GROUP SIZE and GROUP INDEX
LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(key).
... key-key1 ... key-key2 ... key-index ... key-size ...
ENDLOOP.WITHOUT MEMBERS
Skip member iteration, only process group keys:
LOOP AT spfli_tab INTO wa
GROUP BY wa-carrid
WITHOUT MEMBERS
INTO DATA(key).
" Only group key available, no member loop possible
... key ...
ENDLOOP.Binding Types Comparison
| Type | Description | Features |
|---|---|---|
| Representative | Work area represents group | Simpler syntax |
| Group Key | Explicit output area | GROUP INDEX, GROUP SIZE, WITHOUT MEMBERS |
Advanced Patterns
Aggregation with Grouping
LOOP AT flights INTO DATA(flight)
GROUP BY flight-carrid
INTO DATA(carrier).
DATA(total) = REDUCE i( INIT sum = 0
FOR member IN GROUP carrier
NEXT sum = sum + member-price ).
out->write( |{ carrier }: { total }| ).
ENDLOOP.Nested Grouping
LOOP AT itab INTO wa
GROUP BY ( cat1 = wa-field1 cat2 = wa-field2 )
INTO DATA(group1).
LOOP AT GROUP group1 INTO DATA(member)
GROUP BY member-field3
INTO DATA(group2).
LOOP AT GROUP group2 INTO DATA(detail).
" Process detail
ENDLOOP.
ENDLOOP.
ENDLOOP.Best Practices
- Use GROUP SIZE for counting without member iteration
- Use WITHOUT MEMBERS when only aggregates needed
- Prefer structured keys for multi-column grouping
- Use REDUCE for aggregations within groups