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.
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博客 ” ,链接:http://blog.itpub.net/24345566/viewspace-1049178/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24345566/viewspace-1049178/