ITPub博客

首页 > 数据库 > 数据库开发技术 > 关于删除内表重复字段所在行的问题

关于删除内表重复字段所在行的问题

原创 数据库开发技术 作者:lha2010 时间:2011-04-28 16:00:31 0 删除 编辑

1.

首先看看下面这个表格

编码

数量

备注文本

AD10

12

Y

T

AD32

23

Y

T

BC45

34

Y

T

AF65

45

G

T

FD32

45

G

T

BC45

56

G

AF65

45

Y

BC45

33

Y

AD10

67

G

AD10

100

G

2.

现在我想删除“编码”字段重复的行,怎么办?

A

好!我先在编辑器里做一个这样的内表。

REPORT ZT.

DATA: BEGIN OF mydata OCCURS 10,

z1(4),

z2(5),

z3(1),

END OF mydata..

DATA mydata1 LIKE mydata OCCURS 0 WITH HEADER LINE.

DATA WA_DATA LIKE mydata.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '12'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD32'.

MYDATA-Z2 = '23'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '34'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'FD32'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '56'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '33'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '67'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '100'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

loop at mydata into WA_DATA.

write: / WA_DATA-z1,wa_data-z2,wa_data-z3.

endloop.

B.

从A步骤看,Z1字段中“AD10”有3行,“BC45”字段有3行,等等。我只想留一行。首先按z1、z2排序,然后执行固定语句:

delete adjacent duplicates from itab.

下面我把全部代码列出:

data x(4).

DATA: BEGIN OF mydata OCCURS 10,

z1(4),

z2(5),

z3(1),

END OF mydata..

DATA mydata1 LIKE mydata OCCURS 0 WITH HEADER LINE.

DATA WA_DATA LIKE mydata.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '12'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD32'.

MYDATA-Z2 = '23'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '34'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'FD32'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '56'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '33'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '67'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '100'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

sort mydata by z1 z2.

delete adjacent duplicates from mydata comparing z1.

loop at mydata into WA_DATA.

write: / WA_DATA-z1,wa_data-z2,wa_data-z3.

endloop.

C.我的另一种做法

B步骤使用了标准语句,现在我采用一段自定义代码来处理:

data x(4).

DATA: BEGIN OF mydata OCCURS 10,

z1(4),

z2(5),

z3(1),

END OF mydata..

DATA mydata1 LIKE mydata OCCURS 0 WITH HEADER LINE.

DATA WA_DATA LIKE mydata.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '100'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD32'.

MYDATA-Z2 = '23'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '34'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'FD32'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '56'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AF65'.

MYDATA-Z2 = '45'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'BC45'.

MYDATA-Z2 = '33'.

MYDATA-Z3 = 'Y'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '67'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

MYDATA-Z1 = 'AD10'.

MYDATA-Z2 = '100'.

MYDATA-Z3 = 'G'.

APPEND MYDATA.

sort mydata by z1 z2.

loop at mydata into WA_DATA.

if wa_data-z1 = x.

delete mydata.

endif.

x = wa_data-z1.

endloop.

loop at mydata into WA_DATA.

write: / WA_DATA-z1,wa_data-z2,wa_data-z3.

endloop.

这个结果和B步骤殊途同归的。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24345566/viewspace-1049178/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 二分法取方根
请登录后发表评论 登录
全部评论

注册时间:2013-03-16

  • 博文量
    18
  • 访问量
    17861