ABAP delete duplicate的用法指南

本文引用自http://hi.baidu.com/wangyantsing/blog/item/19b2a8189fbc1b0134fa4157.html

 

 DELETE TABLE <itab> FROM <wa>.
or
DELETE TABLE <itab> WITH TABLE KEY <k1> = <f 1> ... <k n> = <f n>.
根据条件删除内表中的一行数据

DELETE <itab> WHERE <cond>.
根据条件删除内表中的多行数据

DELETE ADJACENT DUPLICATE ENTRIES FROM <itab>
[COMPARING <f1> <f 2> ...
|ALL FIELDS].
删除相邻行的重复项,保留第一条记录
1、如果没有定义non-nuique键,并且在删除的时候没有指定条件,则将比较所有的字段;等同于比较
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS
定义non-unique字段方式如下:
DATA ITAB LIKE STANDARD TABLE OF LINE
WITH NON-UNIQUE KEY COL2.
2、如果有non-unique键,则在没有删除的比较条件时比较该key,删除相邻的重复项。
3、可以使用指定条件进行比较处理 COMPARING <f1> <f 2> ... ,此时,需要所有指定字段在相邻处相同,否则不会删除。
当然在此也可以使用动态的方式指定比较的内容,下面的例子二我做了一个简单的测试,仅供参考。

其他补充说明:
如果对比较的字段进行了事先的排序,则可以将所有该字段重复的行全部删除。
如果至少删除成功一条,则sy-subrc返回0,否则返回4.

下面将是两个例子:
例子一:
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.

DATA ITAB LIKE HASHED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 4 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
INSERT LINE INTO TABLE ITAB.
ENDDO.

LINE-COL1 = 1.

DELETE TABLE ITAB: FROM LINE,
WITH TABLE KEY COL1 = 3.

LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

例子二:
DATA OFF TYPE I.

DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE C,
col3 type c,
END OF LINE.

DATA ITAB LIKE STANDARD TABLE OF LINE
WITH NON-UNIQUE KEY COL2.
LINE-COL1 = 1. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TO ITAB.
LINE-COL1 = 2. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TO ITAB.
LINE-COL1 = 3. LINE-COL2 = 'B'. line-col3 = '8'. APPEND LINE TO ITAB.
LINE-COL1 = 4. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TO ITAB.
LINE-COL1 = 5. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TO ITAB.

OFF = 0.
PERFORM LIST.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.
OFF = 30.
PERFORM LIST.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING col1 col3.
OFF = 60.
PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB.

*data:col(4) type c.
*FIELD-SYMBOLS: <fs-lydn> type ANY.
*col = 'col1'.
*ASSIGN col to <fs-lydn>.
*DELETE ADJACENT DUPLICATES FROM ITAB COMPARING (<fs-lydn>) col3.
*OFF = 60.
*PERFORM LIST.
*DELETE ADJACENT DUPLICATES FROM ITAB.

OFF = 90.
PERFORM LIST.
FORM LIST.
SKIP TO LINE 3.
LOOP AT ITAB INTO LINE.
WRITE: AT /OFF LINE-COL1, LINE-COL2,line-col3.
ENDLOOP.
ENDFORM.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值