SAP ABAP开发过程中如何高效率从内表中获取不重复记录?

在SAP ERP系统开发过程中,经常会遇到需要将大量数据从数据库表中提取,储存在内表中,供进一步处理之用。而在这个内表中,有时候存在大量重复的记录,若要从中得到唯一记录,有以下三种方法:

方法一: 内部表循环赋值,使用COLLECT语句追加记录

方法二: 内部表循环赋值,使用AT NEW和APPEND语句追加记录

方法三: 整个内部表赋值,使用DELETE ADJACENT DUPLICATES语句删除重复记录

      以上三种方法,在内表记录数不多的情况下,对系统运行影响不大,但若遇到内表记录数众多,则不同方法对系统运行性能将产生一定影响,以下是一个测试程序,测试结果,方法三是系统运行效率最高的。

REPORT y_test_temp1 .

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 = '1005'.

DO 10 TIMES. "运行10次看平均结果
  REFRESH it_mara.
* 方法一
  GET RUN TIME FIELD t1.
  LOOP AT it_marc.“在内表中循环通过collect语句得到不重复记录
    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.

* 方法二
  SORT it_marc BY matnr."按物料排序
  GET RUN TIME FIELD t1.
  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.

* 方法三:
  it_mara[] = it_marc[].
  GET RUN TIME FIELD t1.

  DELETE ADJACENT DUPLICATES 
        FROM it_mara     COMPARING matnr.“在内表中删除重复记录
  GET RUN TIME FIELD t2.
  times = t2 - t1.
  WRITE: times.
  NEW-LINE.
ENDDO.

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᝰ随心ꦿེএ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值