三种方法简单介绍:
方法一: 内部表循环赋值,使用COLLECT语句追加记录
方法二: 内部表循环赋值,使用AT NEW和APPEND语句追加记录
方法三: 整个内部表赋值,使用DELETE ADJACENT DUPLICATES语句删除重复记录
但如果需要数值字段累加的话,我觉得应该是用COLLECT吧,其它两种应该只是删除重复记录的功能
和COLLECT相比还是有一定的差距的,
运行10次结果如下:
方法一 |
方法二 |
方法三 |
48,139 |
68,657 |
8,830 |
45,230 |
68,474 |
8,789 |
44,751 |
68,553 |
8,779 |
44,771 |
68,523 |
8,777 |
44,775 |
68,441 |
8,761 |
44,777 |
68,525 |
8,780 |
45,422 |
69,461 |
9,318 |
45,367 |
68,404 |
8,773 |
44,743 |
68,389 |
8,771 |
44,871 |
68,400 |
9,183 |
运行结果分析:
数据说明一切……
CODE:
REPORT z_xam_temp3 .
DATA: t1 TYPE i,
t2 TYPE i,
times TYPE i.
TABLES: marc.
DATA: BEGIN OF it_marc OCCURS 0,
matnr LIKE marc-matnr,
werks LIKE marc-werks,
END OF it_marc.
DATA: BEGIN OF it_mara OCCURS 0,
matnr LIKE mara-matnr,
END OF it_mara.
SELECT matnr werks
INTO TABLE it_marc
FROM marc
WHERE werks = '1101'.
DO 10 TIMES.
REFRESH it_mara.
* METHOD 1
GET RUN TIME FIELD t1.
LOOP AT it_marc.
CLEAR it_mara.
it_mara-matnr = it_marc-matnr.
COLLECT it_mara.
ENDLOOP.
GET RUN TIME FIELD t2.
times = t2 - t1.
WRITE: AT /1 times.
* METHOD 2
GET RUN TIME FIELD t1.
* SORT it_mara BY matnr.
LOOP AT it_marc.
AT NEW matnr.
CLEAR it_mara.
it_mara-matnr = it_marc-matnr.
APPEND it_mara.
ENDAT.
ENDLOOP.
GET RUN TIME FIELD t2.
times = t2 - t1.
WRITE: times.
* METHOD 3:
GET RUN TIME FIELD t1.
it_mara[] = it_marc[].
* SORT it_mara BY matnr.
DELETE ADJACENT DUPLICATES FROM it_mara
COMPARING matnr.
GET RUN TIME FIELD t2.
times = t2 - t1.
WRITE: times.
NEW-LINE.
ENDDO.