As pointed out in the comments, LOOP AT ... GROUP BY
doesn't support dynamic group-by clauses from strings.
In this simple example you could create your grouping key dynamically at runtime by creating it with an inline expression like COND
or SWITCH
:
LOOP AT lt_mara INTO DATA(mara) GROUP BY
SWITCH string(
i_condition_type
WHEN 'ERNAM' THEN mara-ernam
WHEN 'ERSDA' THEN mara-ersda
ELSE ''
)
But your key-building logic might be too complex to express with an expression (or at least an expression which is still readable by a human being). In that case there is something else you can do: group on values returned by a method:
LOOP AT lt_mara INTO DATA(mara)
GROUP BY my_grouping_method( line = mara
condition = i_condition_type )
The implementation of that method can then include any logic you need to form the grouping key at runtime:
METHOD my_grouping_method.
IF condition = 'ERNAM'.
result = line-ernam.
ELSE.
result = line-ersda.
ENDIF.
ENDMETHOD.
The grouping method can also be a method of a different object. So you could represent your grouping condition as an own class. That would allow you to write code like this:
DATA(lo_group_condition) = NEW zcl_mara_group_condition( 'ERNAM' ).
LOOP AT lt_mara INTO DATA(mara)
GROUP BY lo_group_condition->get_key_from( mara )
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…