Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

advise

Former Member
0 Likes
691

Internal table ITAB

FIELD1---FIELD2

111------123

111------234

111------346

111------678

333------123

Keep only the record 111 and delete the 333 since it is not a duplicate record

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
677

Hi,

see this code.


DATA:BEGIN OF itab OCCURS 0,
  field1(3),
  FIELD2(3),
  END OF itab.

DATA:lin TYPE sy-tfill.
DATA:jtab like itab OCCURS 0 WITH HEADER LINE.
DATA:ktab like itab OCCURS 0 WITH HEADER LINE.

  itab-field1 = '111'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '234'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '346'.
  APPEND itab.
  itab-field1 = '333'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '678'.
  APPEND itab.

  sort itab.
  jtab[] = itab[].
  DELETE ADJACENT DUPLICATES FROM jtab COMPARING field1.

  LOOP AT jtab.
    REFRESH ktab.
    LOOP AT itab WHERE field1 = jtab-field1.
      APPEND itab to ktab.
    ENDLOOP.
    DESCRIBE TABLE ktab LINES lin.
    IF lin = 1.
      DELETE TABLE itab from jtab.
    ENDIF.
  ENDLOOP.

  LOOP AT itab.
    write:/ itab.
  ENDLOOP.

rgds,

bharat.

Internal table ITAB

FIELD1---FIELD2

111------123

111------234

111------346

111------678

333------123

Keep only the record 111 and delete the 333 since it is not a duplicate record

5 REPLIES 5
Read only

Former Member
0 Likes
677

declare one more itab with same structure as first itab.

write the code as below.

data: fl type i.

itab1[] = itab[].

sort itab1 by field1.

delete adjacent duplicates from itab1 comparing field1.

sort itab by field1.

loop at itab1.

clear fl.

loop at itab where field1 = itab1-field1.

fl = fl + 1.

if fl > 1.

exit.

endif.

endloop.

if fl = 1.

delete itab[] where field1 = itab1-field1.

endif.

endloop.

Read only

Former Member
0 Likes
677

Hi,

Refer this code.

read table itab into wa with key field1.

loop at itab into wa1 where field1 <> wa-field1 .

delete itab from wa.

endloop.

This will work.

Reward if helpful.

Regards,

Ramya

Read only

Former Member
0 Likes
678

Hi,

see this code.


DATA:BEGIN OF itab OCCURS 0,
  field1(3),
  FIELD2(3),
  END OF itab.

DATA:lin TYPE sy-tfill.
DATA:jtab like itab OCCURS 0 WITH HEADER LINE.
DATA:ktab like itab OCCURS 0 WITH HEADER LINE.

  itab-field1 = '111'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '234'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '346'.
  APPEND itab.
  itab-field1 = '333'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '678'.
  APPEND itab.

  sort itab.
  jtab[] = itab[].
  DELETE ADJACENT DUPLICATES FROM jtab COMPARING field1.

  LOOP AT jtab.
    REFRESH ktab.
    LOOP AT itab WHERE field1 = jtab-field1.
      APPEND itab to ktab.
    ENDLOOP.
    DESCRIBE TABLE ktab LINES lin.
    IF lin = 1.
      DELETE TABLE itab from jtab.
    ENDIF.
  ENDLOOP.

  LOOP AT itab.
    write:/ itab.
  ENDLOOP.

rgds,

bharat.

Read only

0 Likes
677

Hi,

i think this is simpler than earlier.


DATA:BEGIN OF itab OCCURS 0,
  field1(3),
  FIELD2(3),
  END OF itab.

DATA:lin TYPE sy-tfill.

  itab-field1 = '111'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '234'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '346'.
  APPEND itab.
  itab-field1 = '333'.
  itab-field2 = '123'.
  APPEND itab.
  itab-field1 = '111'.
  itab-field2 = '678'.
  APPEND itab.

  LOOP AT itab.
    AT NEW field1.
     CLEAR lin.
    ENDAT.
    lin = lin + 1.
    AT END OF field1.
      IF lin = 1.
        delete itab.
      ENDIF.
    ENDAT.
  ENDLOOP.

  LOOP AT itab.
    write:/ itab.
  ENDLOOP.

rgds,

bharat

Read only

Former Member
0 Likes
677

Hi,

Try this code.Internal table itab2 will contain your required data.

sort itab by field1.

loop at itab.

if itab-field1 = v_field1.

if sy-tabix = '2'.

append wa_itab2 to itab2.

endif.

append itab to itab2.

endif.

if sy-tabix = '1'.

wa_itab2 = itab.

endif.

v_field1 = itab-field1.

endloop.

Hope this will help.

Regards'

Shibin

Edited by: Shibin on Mar 14, 2008 7:07 AM