凡尘clsoho™的博客

E-mail & MSN: clsoho@hotmail.com
QQ1超级群: <101817641已满> QQ2群:<110722895已满>
QQ3超级群:<23765855>QQ4超级群:<85338969>

 

三种方法简单介绍:

方法一: 内部表循环赋值,使用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.

转自:http://abaper.blogbus.com/logs/2679647.html

posted on 2010-01-20 15:20  凡尘clsoho  阅读(455)  评论(0编辑  收藏  举报