如何将内表重复项的索引存入每行的嵌套内表?
修改ABAP内表重复项索引存储格式为嵌套内表结构
原代码问题
原代码将重复项的索引拼接成单个字符串存入结果表的一行,现在需要调整为每行对应一个嵌套内表,每个索引单独作为嵌套内表的一行。
修改后的完整代码
TYPES: BEGIN OF ty_duplicates, id TYPE i, END OF ty_duplicates. TYPES: _duplicates TYPE STANDARD TABLE OF ty_duplicates WITH NON-UNIQUE DEFAULT KEY, ty_index_table TYPE STANDARD TABLE OF i WITH DEFAULT KEY, ty_nested_indices TYPE STANDARD TABLE OF ty_index_table WITH DEFAULT KEY. DATA(table_with_duplicates) = VALUE _duplicates( ( id = 1 ) ( id = 2 ) ( id = 1 ) ( id = 3 ) ( id = 3 ) ). DATA(duplicates) = VALUE ty_nested_indices( FOR GROUPS <group> OF <line> IN table_with_duplicates GROUP BY ( id = <line>-id size = GROUP SIZE ) ( LINES OF COND #( WHEN <group>-size > 1 THEN VALUE ty_index_table( FOR <line2> IN GROUP <group> INDEX INTO idx ( idx ) ) ) ) ). cl_demo_output=>display_data( EXPORTING value = duplicates ).
关键改动说明
- 新增嵌套表类型:定义
ty_index_table存储单个重复组的所有索引,ty_nested_indices作为最终结果的外层表,每行是一个ty_index_table类型的嵌套内表。 - 移除字符串拼接逻辑:不再使用
concat_lines_of拼接索引,而是直接通过循环分组内的行,为每个重复组生成独立的索引内表。 - 保留重复组过滤:依然通过
GROUP SIZE > 1筛选出存在重复的分组,无重复的项不会被纳入结果。
运行结果
最终duplicates内表结构与预期一致:
- 第一行嵌套内表包含索引1、3(对应id=1的重复项)
- 第二行嵌套内表包含索引4、5(对应id=3的重复项)
内容的提问来源于stack exchange,提问作者SBECK1
相关产品推荐
相关产品推荐

