假设内表gt_ab有 col1,col2,col3三个字段。
DATA gt_ab TYPE STANDARD TABLE OF ty_ab.”内表
DATA gs_ab TYPE ty_ab. ”结构
第一条记录:col1=’1000’,col2=’AAA1’,col3=1
第二条记录:col1=’1000’,col2=’AAA2’,col3=2
第三条记录:col1=’2000’,col2=’AAA2’,col3=3
第四条记录:col1=’2000’,col2=’AAA2’,col3=4
第五条记录:col1=’2000’,col2=’AAA3’,col3=5
第六条记录:col1=’3000’,col2=’AAA3’,col3=6
AT NEW col1:以col1为分组条件,在每组的第一条记录时执行,在上述例子里会在在第一条,第三条,第六条记录时会执行。
AT END OF col1:以col1为分组条件,在每组的最后一条记录时执行,在上述例子里会在在第二条,第五条,第六条记录时会执行。
AT NEW col2:以col1和col2为分组条件,在每组的第一条记录时执行,在上述例子里会在第一条,第二条,第三条,第五条,第六条记录时会执行。
AT END OF col2:以col1和col2为分组条件,在每组的最后一条记录时执行,在上述例子里会在在第一条,第二条,第四条,第五条,第六条记录时会执行。
AT NEW或者AT END OFxxx以xxx以及其左边的所有字段为分组条件,在每组的第一条记录或者最后一条记录时执行。
进入AT NEW和AT END OF语句后,工作区里的数字型会清零,字符型会变成*,所以不能直接使用工作区进行数据操作。可以使用READ TABLEgt_ab INTO gs_ab INDEX SY-TABIX语句重新读到该行数据。
AT NEW和AT END OF可以用来进行字段的列求和或者汇总,虽然COLLECT也可以实现汇总,但是COLLECT是对内表里所有的数字型字段进行汇总,如果需要比较复杂的功能,还是需要使用AT NEW和AT END OF。