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 |