DELETE ADJACEMENT DUPLICATES FROM 内部テーブル COMPARING 項目.
で内部テーブルの重複を削除する場合は、事前にソートされた状態にしましょう。
REPORT ZTEST.
TYPES:
BEGIN OF TYP_TEST,
INTG TYP I,
END OF TYP_TEST,
TYP_IT_TEST TYPE STANDARD TABLE OF TYP_TEST.
DATA:
ST_TEST TYPE TYP_TEST,
IT_TEST TYPE TYP_TD_TEST.
START-OF-SELECTION.
ST_TEST-INTG = 1.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 3.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 2.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 1.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 1.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 3.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 2.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 1.
APPEND ST_TEST TO IT_TEST.
ST_TEST-INTG = 1.
APPEND ST_TEST TO IT_TEST.
DELETE ADJACEMENT DUPLICATES FROM IT_TEST COMPARING INTG.
LOOP AT IT_TEST INTO ST_TEST.
WRITE:
/006(5) ST_TEST-INTG.
ENDLOOP.
DELETE ADJACEMENT DUPLICATES
で重複を削除する前のIT_TESTは、
- IT_TEST
# | INTG |
---|---|
1 | 1 |
2 | 3 |
3 | 2 |
4 | 1 |
5 | 1 |
6 | 3 |
7 | 2 |
8 | 1 |
9 | 1 |
↑こうなっています。
LOOP AT IT_TEST INTO ST_TEST.
の時点でIT_TESTがどうなっているかと言うと、
- IT_TEST
# | INTG |
---|---|
1 | 1 |
2 | 3 |
3 | 2 |
4 | 1 |
5 | 3 |
6 | 2 |
7 | 1 |
↑こうなっています。DELETE ADJACEMENT DUPLICATES
は隣接する行で重複しているか判断するので、ソートされてないと
うまくいかないんですよね。
DELETE ADJACENT DUPLICATE ENTRIES FROM itab
[COMPARING f1 f2 ... |ALL FIELDS].
内部テーブル itab から、すべての隣接する重複エントリが削除されます。
https://help.sap.com/doc/saphelp_nw70/7.0.12/ja-JP/06/aafd54fc4011d195280000e8353423/content.htm?no_cache=true
これを回避するためには、重複を削除する前にIT_TEST
にSORTをかけます。
*中略
APPEND ST_TEST TO IT_TEST.
SORT IT_TEST BY INTG ASCENDING.
DELETE ADJACEMENT DUPLICATES FROM IT_TEST COMPARING INTG.
LOOP AT IT_TEST INTO ST_TEST.
WRITE:
/006(5) ST_TEST-INTG.
ENDLOOP.
こうすれば、↓のようにちゃんと重複が削除されます。
- IT_TEST
# | INTG |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |