在 SAP ABAP 中抑制經典報表和 ALV 報表中的重複條目


要刪除內部表中相鄰的重複條目,可以使用以下命令:

DELETE ADJACENT DUPLICATE ENTRIES FROM <itab>
                     [COMPARING <f1> <f 2> ...
                         |ALL FIELDS].

此外,請考慮以下幾點:

  • 系統將從內部表 <itab> 中刪除所有相鄰的重複條目。如果條目滿足以下比較條件之一,則它們是重複的。
  • 如果不使用 COMPARING 附加項,則表中鍵欄位的內容在兩行中必須相同。
  • 如果使用附加項 COMPARING <f1> <f 2> ...,則指定欄位 <f 1 > <f 2 > ... 的內容在兩行中必須相同。您還可以動態地將欄位 <f i > 指定為表單 (<n i >) 中欄位 <n i > 的內容。如果在執行語句時 <n i > 為空,則會忽略它。您可以透過指定偏移量和長度來將搜尋限制在部分欄位。
  • 如果使用附加項 COMPARING ALL FIELDS,則兩行的所有欄位的內容都必須相同。
  • 如果表按指定的比較條件排序,則可以使用此語句刪除內部表中的所有重複條目。
  • 如果至少刪除了一行,則系統將 SY-SUBRC 設定為 0,否則設定為 4。

示例

DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE HASHED TABLE OF LINE WITH UNIQUE KEY COL1.
DO 4 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
INSERT LINE INTO TABLE ITAB.
ENDDO.
LINE-COL1 = 1.
DELETE TABLE ITAB: FROM LINE,
WITH TABLE KEY COL1 = 3.
LOOP AT ITAB INTO LINE.
   WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

輸出

輸出為:

2        4
4       16

程式使用平方數列表填充雜湊表。DELETE 語句刪除表中鍵欄位 COL1 內容為 1 或 3 的行。

示例

DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE HASHED TABLE OF LINE WITH UNIQUE KEY COL1.
DO 4 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
INSERT LINE INTO TABLE ITAB.
ENDDO.
DELETE ITAB WHERE ( COL2 > 1 ) AND ( COL1 < 4 ).
LOOP AT ITAB INTO LINE.
  WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

輸出

輸出為:

1        1
4       16

程式使用平方數列表填充雜湊表。DELETE 語句刪除表中欄位 COL2 的內容大於 1 且欄位 COL1 的內容小於 4 的行。

更新於: 2020-03-12

1K+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告