关键字COLLECT可将工作区的内容作为单个行添加到内表中,如果内表存在相同主表键的行,则将数值类型字段的值累加到现有的行中。主表键是指非数值类型的字段。函数模块ABL_TABLE_HASH_STATE可用于检查标准表是否适合使用COLLECT进行编辑。COLLECT关键字用于创建唯一的或压缩的数据集。若唯一性或压缩不重要,可以选择使用APPEND关键字。
语法:
COLLECT wa INTO itab [result].
简单实例一:
TYPES:BEGIN OF TYP_TAB,
V1 TYPE I,
V2 TYPE I,
KEY TYPE STRING, " 主表键 非数值类型
END OF TYP_TAB.
DATA GT_TAB TYPE TABLE OF TYP_TAB WITH HEADER LINE.
DATA GT_TMP TYPE TABLE OF TYP_TAB WITH HEADER LINE.
" 内表数据的初始化
DO 8 TIMES .
IF SY-INDEX MOD 3 = 0.
GT_TAB-KEY = 'A' .
GT_TAB-V1 = SY-INDEX .
GT_TAB-V2 = SY-INDEX + 1 .
ELSEIF SY-INDEX MOD 3 = 1 .
GT_TAB-KEY = 'B' .
GT_TAB-V1 = SY-INDEX .
GT_TAB-V2 = SY-INDEX - 1 .
ELSE .
GT_TAB-KEY = 'C' .
GT_TAB-V1 = SY-INDEX - 1 .
GT_TAB-V2 = SY-INDEX - 2 .
ENDIF .
APPEND GT_TAB.
ENDDO .
1、内表GT_TAB的数据初始化。
2、使用关键字COLLECT对具有相同主表键的数值类型字段进行合并。结果如下:
LOOP AT GT_TAB.
COLLECT GT_TAB INTO GT_TMP. "
ENDLOOP.
3、如果内表没有主表键,换句话说也就是内表的全部字段都为数值类型。那么所有的值将在第一行进行相加。结果如下面的图片所示。
简单示例二:
TYPES:BEGIN OF TYP_TAB,
V1 TYPE I,
V2 TYPE I,
END OF TYP_TAB.
DATA GT_TAB TYPE TABLE OF TYP_TAB WITH HEADER LINE.
DATA GT_TMP TYPE TABLE OF TYP_TAB .
" 内表数据的初始化
DO 4 TIMES .
GT_TAB-V1 = SY-INDEX .
GT_TAB-V2 = SY-INDEX ** 2 .
APPEND GT_TAB.
ENDDO .
LOOP AT GT_TAB.
COLLECT GT_TAB INTO GT_TMP.
ENDLOOP.