簡體   English   中英

從內部表中查找、刪除和提取重復項

[英]Find, delete and extract duplicates from an internal table

我有一個內部表,其中包含從文件上傳的 200 萬行。 我想刪除任何重復的行並提取重復的行號並將它們添加到另一個表中。 使用 ABAP 7.40 執行此操作的最佳/最有效方法是什么? 經典的 ABAP 也不錯。

所以這是我的原始表的示例,我想通過比較 A 列和 B 列來查找重復項

A  | B  | C
-----------
a1 | b1 | c1
a1 | b2 | c1
a2 | b1 | C2
a1 | b1 | c2
a2 | b2 | c2

第 1 行和第 4 行是重復的,所以我想刪除它們以結束

A  | B  | C
-----------
a1 | b2 | c1
a2 | b1 | C2
a2 | b2 | c2

並且還有另一個存儲重復項的表:

Row number  | Error 
-------------------
1           | Duplicate
4           | Duplicate      

我在這個網站上看到過類似的請求,但它們的工作方式與我需要的有點不同。 謝謝。

這是查找哪些行重復的代碼(有效 >= 7.40):

TYPES : BEGIN OF ty_line,
          a TYPE c LENGTH 2,
          b TYPE c LENGTH 2,
          c TYPE c LENGTH 2,
        END OF ty_line,
        ty_lines TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.

DATA(itab) = VALUE ty_lines(
( a = 'a1' b = 'b1' c = 'c1' )
( a = 'a1' b = 'b2' c = 'c1' )
( a = 'a2' b = 'b1' c = 'c2' )
( a = 'a1' b = 'b1' c = 'c2' )
( a = 'a2' b = 'b2' c = 'c2' ) ).

DATA(duplicates) = VALUE string_table(
    FOR GROUPS <group> OF <line> IN itab
    GROUP BY ( a = <line>-a b = <line>-b size = GROUP SIZE )
    ( LINES OF COND #( WHEN <group>-size > 1 THEN VALUE string_table( (
        concat_lines_of(
            table = VALUE string_table( 
                    FOR <line2> IN GROUP <group> INDEX INTO tabix ( |{ tabix }| ) )
            sep   = ',' ) ) ) ) ) ).

ASSERT duplicates = VALUE string_table( ( `1,4` ) ).

如果組的大小為 1 LINES OF我使用LINES OF不生成一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM