跟有没有表头没关系 习惯写有表头的 没表头的自己去写
ITAB是原始数据表
ITAB2是中转表
ITAB3是最后结果表
DATA: BEGIN OF ITAB OCCURS 0,
COL1 TYPE I,
COL2 TYPE I,
COL3 TYPE I,
FLAG TYPE CHAR1,
END OF ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 3.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 4.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 5.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 5.
APPEND ITAB.
ITAB-COL1 = 3.
ITAB-COL2 = 2 .
ITAB-COL3 = 3.
APPEND ITAB.
DATA: ITAB2 LIKE TABLE OF ITAB WITH HEADER LINE.
DATA: ITAB3 LIKE TABLE OF ITAB WITH HEADER LINE.
LOOP AT ITAB.
READ TABLE ITAB2 WITH KEY COL1 = ITAB-COL1 COL2 = ITAB-COL2.
IF SY-SUBRC <> 0.
APPEND ITAB TO ITAB2.
ELSE.
APPEND ITAB TO ITAB3.
READ TABLE ITAB3 WITH KEY COL1 = ITAB-COL1 COL2 = ITAB-COL2 FLAG = 'X'.
IF SY-SUBRC <> 0.
ITAB2-FLAG = 'X'.
APPEND ITAB2 TO ITAB3.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT ITAB3.
WRITE:/ ITAB3-COL1, ITAB3-COL2, ITAB3-COL3.
ENDLOOP.
个人感觉这个算法比较没效率,另外想请问为什么要找出两行中某字段的相同的行,是为了用ABAP处理收集的数据吗?如果是这样的话loop里面套loop反而来的更有效率,因为你每两行进行比对的话,次数应该是(n!),你的思路实现起来反而复杂。再试试用loop来写吧,如果有什么问题你追问一下,我再看看。
1 你的思路不对。
2 loop里面嵌套loop未必慢,n小于10万的时候,性能差异可以不用考虑。
3 不用
^_^