LOOP AT… GROUP BY with dynamic group key

后端 未结 1 1439
暖寄归人
暖寄归人 2020-12-21 03:19

I am trying to loop by grouping data with dynamic group parameter.

We can use dynamic queries on WHERE conditions on loops but I do not know whether it is possible to

相关标签:
1条回答
  • 2020-12-21 03:30

    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 )
    
     
    
    0 讨论(0)
提交回复
热议问题