如何不使用循环合并两个不同结构内表的行到同一内表?
ABAP内表按行合并无需显式循环的实现方法
针对你需要将itab1和itab2按行一一对应合并所有字段到ftab的需求,完全可以不用写显式的LOOP循环,利用ABAP的隐式内表构造或内置函数就能实现,以下是两种可行方案:
方案一:隐式内表构造 + CORRESPONDING
直接通过VALUE内表构造器结合隐式循环(无需手动写LOOP),将两行数据的字段合并:
ftab = VALUE #( FOR i = 1 TO lines( itab1 ) ( CORRESPONDING #( itab1[ i ] ) CORRESPONDING #( itab2[ i ] ) ) ).
方案二:使用ZIP函数配对后转换
先通过ZIP内置函数将两个内表按行配对成包含双结构的临时内表,再转换为ftab的结构:
DATA(lt_zipped) = ZIP( itab1 = itab1 itab2 = itab2 ). ftab = VALUE #( FOR wa_zip IN lt_zipped ( CORRESPONDING #( wa_zip-table1 ) CORRESPONDING #( wa_zip-table2 ) ) ).
注意事项
- 两种方案都要求itab1和itab2的行数完全一致,否则会出现数据不匹配或运行时错误
- 如果ftab与itab1、itab2的字段组合不完全匹配,可在
CORRESPONDING中添加MAPPING参数指定字段映射关系 - 若存在同名字段,后面的
CORRESPONDING会覆盖前面的字段值,需根据业务需求调整顺序
内容的提问来源于stack exchange,提问作者whatever_2808
相关产品推荐
相关产品推荐

