5 Replies Latest reply: Feb 15, 2008 1:31 PM by Guest RSS

Delete Duplicate Entries

Ram K
Currently Being Moderated

Hi gurus,

 

            In my internal table i want to delete the duplicate entries . I used DELETE DUPLICATE ENTRIES Syntax, but there is one situation where one document number has three records just with the amount field as different. but because i have used the above syntax, its deleting two records and jsut passing one record to the final structure. but i want all those 3 records into my final structure. could you pls tel me how can i do it. thanks in advance,

 

 

             Ram.

  • Re: Delete Duplicate Entries
    Himanshu Verma
    Currently Being Moderated

    Hi,

      Use delete adjacant duplicates comparing fieldname1(Doc No) fieldname2(amount).

     

    Regards,

    Himanshu

     

    Edited by: Himanshu Verma on Feb 15, 2008 5:09 PM

  • Re: Delete Duplicate Entries
    karthikeyan palaniayya
    Currently Being Moderated

    hi

    use

     

    delete adjacent duplicates comparing  (amount filed name)

     

    regards

    karthik

    • Re: Delete Duplicate Entries
      Currently Being Moderated

      Hi,

       

      Before deleting first sort the entire table entries using some key.

       

      after that use delete adjacent dupliates sysntax by comparing key on which u sorted.

       

       

      ex:

       

      sort int_table by field-name.

       

      delete adjacent duplicates from int_atble comparing filed-name.

       

       

      Regards,

      Sastry

  • Re: Delete Duplicate Entries
    P G
    Currently Being Moderated

    Hi Ram,

     

    As others said, you have to sort you internal table first and have to use the addition COMPARING.

     

    Let me give you some information which will help you to understand things clearly i.e.

    _DELETE - Delete from an internal table_

     

    Variants:

    1. DELETE itab.

    2. DELETE itab INDEX idx.

    3. DELETE itab FROM idx1 TO idx2.

    4. DELETE itab WHERE condition.

    5. DELETE ADJACENT DUPLICATES FROM itab.

     

    Effect

    Deletes one or more lines from an internal table.

     

    Note

    The deletion of lines within a LOOP ... ENDLOOP loop is performed in a sequence of loop passes.

     

    Variant 1

    DELETE itab.

     

    Effect

    The current entry of the internal table itab is

    deleted in a LOOP loop.

    Return code value

    The is set to 0.

     

    Note

    After deleting the current entry in an internal table in a LOOP loop, the effect of further update operations on the current entry without an INDEX specification is not guaranteed and may changed in later Releases.

     

    Variant 2

    DELETE itab INDEX idx.

     

    Effect

    Deletes the idx entry from the internal table itab .

     

    The return code value is set as follows:

     

     

    SY-SUBRC = 0 The entry was deleted.

    SY_SUBRC = 4 The entry does not exist.

     

    Variant 3

    DELETE itab FROM idx1 TO idx2.

     

    Effect

    Deletes the line area from index idx1 to idx2 from internal table itab . At least one of the two parameters FROM idx1 or TO idx2 should be specified. If parameter FROM is missing, the area from the start of the table to line idx2 is deleted. If parameter TO is missing, the area from line idx1 to the end of the table is deleted. Start index idx1 must be greater than 0.

     

    The return code value is set as follows:

     

     

    SY-SUBRC = 0 At least one entry was deleted.

    SY_SUBRC = 4 None of the entries were deleted.

     

    Variant 4

    DELETE itab WHERE condition.

     

    Additions

     

     

     

    1. ... FROM idx1

    2. ... TO idx2

     

    Effect

    Deletes all entries from internal table itab , which satisfies the condition condition .

     

    The return code value is set as follows:

     

     

    SY-SUBRC = 0 At least one entry was deleted.

    SY_SUBRC = 4 None of the entries were deleted.

     

    Addition 1

    ... FROM idx1

     

    Effect

    The line area to be investigated is restricted to the lines up to index idx1 . If the addition FROM idx1 is missing, a search is carried out from the beginning of the table.

    The addition FROM must come before the WHERE condition.

     

    Addition 2

    ... TO idx2

     

    Effect

    Restricts the line area to be investigated to the lines up to index idx2 . If the addition TO idx2 is missing, a search is carried out until the end of the table.

    The addition TO must come before the WHERE condition.

     

    Example

    Delete all lines in a name table between lines 5 and 36, if the entry begins with one of the letters 'A' to 'C' :

     

     

    DATA: BEGIN OF NAMETAB OCCURS 100,

            NAME(30) TYPE C,       END OF NAMETAB.

    ...

    DELETE NAMETAB FROM 5 TO 36 WHERE NAME CA 'ABC'.

     

     

     

    Variant 5

    DELETE ADJACENT DUPLICATES FROM itab.

     

    Additions

     

     

    1. ... COMPARING f1 f2 ...

    2. ... COMPARING ALL FIELDS

     

    Effect

    Deletes neighboring, duplicate entries from the internal table itab . If there are n duplicate entries, the first entry is retained and the other n - 1 entries are deleted.

     

    Two lines are considered to be duplicated if their default keys match.

     

    The return code value is set as follows:

     

     

    SY-SUBRC = 0 At least one duplicate exists, at least one entry deleted.

    SY_SUBRC = 4 No duplicates exist, no entry deleted.

     

    Addition 1

    ... COMPARING f1 f2 ...

     

    Effect

    Two lines of the internal table itab are considered to be duplicates if the specified fields f1 , f2 , .... match.

     

    Addition 2

    ... COMPARING ALL FIELDS

     

    Effect

    Two lines are considered to be duplicates if all fields of the table entries match.

     

    Notes

    The DELETE ADJACENT DUPLICATES statement is especially useful if the internal table itab is sorted by fields (whether in ascending or descending order) which were compared during duplicate determination. In this case, the deletion of neighbouring duplicates is the same as the deletion of all duplicates.

    If a comparison criterion is only known at runtime, it can be specified dynamically as the content of a field name by using COMPARING ... (name) ... . If name is blank at runtime, the comparison criterion is ignored. If name contains an invalid component name, a runtime error occurs.

    Comparison criteria - statistically or dynamically specified - can be further restriced by specifying the offset and/or length.

     

    Note

    Performance

    Deleting a line from an internal table incurs index maintenance costs which depend on the index of the line to be deleted. The runtime depends on the line width of the table.

     

    For example, deleting a line in the middle of an internal table with 200 entries requires about 10 msn (standardized microseconds).

     

    Deleting a range of entries with " DELETE itab FROM idx1 TO idx2. " deleting a set of entries with " DELETE itab WHERE ... " only incur index maintenance costs once. Compared with a LOOP , which deletes line-by-line, this is much faster.

    To delete neighboring, duplicate entries from an internal table, use the variant " DELETE ADJACENT DUPLICATES FROM itab. " instead of LOOP constructions.

     

     

    Hope it will help you,

     

    Regards,

    Sanjeev

  • Re: Delete Duplicate Entries
    Currently Being Moderated

    write :

     

    delete adjacent duplicates from itab comparing all fields ...

Actions