赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 2737|回复: 2

ABAP delete duplicate的用法指南

[复制链接]
发表于 2013-10-19 08:52:55 | 显示全部楼层 |阅读模式
语法格式:
DELETE TABLE <itab> FROM<wa>.
or
DELETE TABLE <itab> WITH TABLE KEY <k1> = <f1> ... <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
          WITHNON-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
          WITHNON-UNIQUE KEY COL2.
LINE-COL1 = 1. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TOITAB.
LINE-COL1 = 1. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TOITAB.
LINE-COL1 = 1. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TOITAB.
LINE-COL1 = 2. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TOITAB.
LINE-COL1 = 3. LINE-COL2 = 'B'. line-col3 = '8'. APPEND LINE TOITAB.
LINE-COL1 = 4. LINE-COL2 = 'B'. line-col3 = '9'. APPEND LINE TOITAB.
LINE-COL1 = 5. LINE-COL2 = 'A'. line-col3 = '9'. APPEND LINE TOITAB.

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.

最近访客

  • austin
    2022-03-24
  • 冰箱里的
    2021-11-16




上一篇:赛跑网-ERP效能优化之SQL(一)
下一篇:ABAP FOR ALL ENTRIES IN 使用指南
本楼点评(0) 收起
发表于 2013-10-31 10:07:56 | 显示全部楼层
LZ帖子不给力,勉强给回复下吧
本楼点评(0) 收起
发表于 2017-11-5 14:03:36 | 显示全部楼层
想找的没找到
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( QQ:108519493QQfsq

GMT+8, 2024-4-30 00:02 , Processed in 0.469678 second(s), 37 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表