‎2008 Aug 11 9:33 PM
Hi,
My internal table has following data
A 10 30
A 20 50
A 00 100
B 20 40
B 10 90
I need output as
(Lowest) (Highest)
A 10 100
B 10 90
How do we do?
rgds
Praveen
‎2008 Aug 11 9:45 PM
Try Like this:
DATA: BEGIN OF ITAB OCCURS 0,
FLD1 TYPE CHAR20,
NUM1 TYPE I,
NUM2 TYPE I,
END OF ITAB.
*A 10 30
*A 20 50
*A 00 100
*B 20 40
*B 10 90
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '30'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '50'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '00'.
ITAB-NUM2 = '100'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '40'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '90'.
APPEND ITAB.
DATA: ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE,
ITAB_TMP LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: NEW_FLD TYPE C.
LOOP AT ITAB.
AT NEW FLD1.
NEW_FLD = 'X'.
ENDAT.
IF NEW_FLD = 'X'.
ITAB_TMP[] = ITAB[].
DELETE ITAB_TMP WHERE FLD1 <> ITAB-FLD1.
CLEAR NEW_FLD.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM1 ASCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-FLD1 = ITAB_TMP-FLD1.
ITAB2-NUM1 = ITAB_TMP-NUM1.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM2 DESCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-NUM2 = ITAB_TMP-NUM2.
APPEND ITAB2.
ENDIF.
ENDLOOP.
LOOP AT ITAB2.
WRITE: / ITAB2-FLD1,
ITAB2-NUM1,
ITAB2-NUM2.
ENDLOOP.
Regards,
Naimesh Patel
‎2008 Aug 11 9:45 PM
Try Like this:
DATA: BEGIN OF ITAB OCCURS 0,
FLD1 TYPE CHAR20,
NUM1 TYPE I,
NUM2 TYPE I,
END OF ITAB.
*A 10 30
*A 20 50
*A 00 100
*B 20 40
*B 10 90
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '30'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '50'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '00'.
ITAB-NUM2 = '100'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '40'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '90'.
APPEND ITAB.
DATA: ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE,
ITAB_TMP LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: NEW_FLD TYPE C.
LOOP AT ITAB.
AT NEW FLD1.
NEW_FLD = 'X'.
ENDAT.
IF NEW_FLD = 'X'.
ITAB_TMP[] = ITAB[].
DELETE ITAB_TMP WHERE FLD1 <> ITAB-FLD1.
CLEAR NEW_FLD.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM1 ASCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-FLD1 = ITAB_TMP-FLD1.
ITAB2-NUM1 = ITAB_TMP-NUM1.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM2 DESCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-NUM2 = ITAB_TMP-NUM2.
APPEND ITAB2.
ENDIF.
ENDLOOP.
LOOP AT ITAB2.
WRITE: / ITAB2-FLD1,
ITAB2-NUM1,
ITAB2-NUM2.
ENDLOOP.
Regards,
Naimesh Patel
‎2008 Aug 11 9:48 PM
Check out this simple code:
*&---------------------------------------------------------------------*
*& Report ZTEST_SDN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_sdn.
TYPES:
BEGIN OF x_tab,
f1 TYPE c LENGTH 1,
f2 TYPE i,
f3 TYPE i,
END OF x_tab.
DATA:
i_tab TYPE STANDARD TABLE OF x_tab INITIAL SIZE 0,
wa_tab TYPE x_tab.
DEFINE append_data.
wa_tab-f1 = &1.
wa_tab-f2 = &2.
wa_tab-f3 = &3.
append wa_tab to i_tab.
END-OF-DEFINITION.
append_data: 'A' '10' '30',
'A' '20' '50',
'A' '00' '100',
'B' '20' '40',
'B' '10' '90'.
IF i_tab[] IS NOT INITIAL.
SORT i_tab BY f1 ASCENDING f2 ASCENDING f3 DESCENDING.
LOOP AT i_tab INTO wa_tab.
WRITE:/1 'WA_TAB-F1:',wa_tab-f1,
20 'WA_TAB-F2:',wa_tab-f2 LEFT-JUSTIFIED,
40 'WA_TAB-F1:',wa_tab-f3 LEFT-JUSTIFIED.
ENDLOOP.
WRITE:/ sy-uline.
DELETE ADJACENT DUPLICATES FROM i_tab COMPARING f1.
LOOP AT i_tab INTO wa_tab.
WRITE:/1 'WA_TAB-F1:',wa_tab-f1,
20 'WA_TAB-F2:',wa_tab-f2 LEFT-JUSTIFIED,
40 'WA_TAB-F1:',wa_tab-f3 LEFT-JUSTIFIED.
ENDLOOP.
ENDIF.
‎2008 Aug 11 10:29 PM
Gaurav,
Your code looks nice.
Could you send me without Work areas..due to my req I have already defined my tables without work areas.
rgds
Praveen
‎2008 Aug 12 3:43 AM
Namesh,
Program does'nt work for 3 or more records. any ideas?
<
report x.
DATA: BEGIN OF ITAB OCCURS 0,
FLD1 TYPE CHAR20,
NUM1 TYPE I,
NUM2 TYPE I,
END OF ITAB.
*A 10 30
*A 20 50
*A 00 100
*B 20 40
*B 10 90
*C 0 40
*C 10 120
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '30'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '50'.
APPEND ITAB.
ITAB-FLD1 = 'A'.
ITAB-NUM1 = '00'.
ITAB-NUM2 = '100'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '20'.
ITAB-NUM2 = '40'.
APPEND ITAB.
ITAB-FLD1 = 'B'.
ITAB-NUM1 = '10'.
ITAB-NUM2 = '90'.
APPEND ITAB.
itab-fld1 = 'C'.
itab-num1 = '0'.
itab-num2 = '40'.
append itab.
itab-fld1 = 'C'.
itab-num1 = '10'.
itab-num2 = '120'.
append itab.
DATA: ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE,
ITAB_TMP LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA: NEW_FLD TYPE C.
LOOP AT ITAB.
AT NEW FLD1.
NEW_FLD = 'X'.
ENDAT.
IF NEW_FLD = 'X'.
ITAB_TMP[] = ITAB[].
DELETE ITAB_TMP WHERE FLD1 = ITAB-FLD1.
CLEAR NEW_FLD.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM1 ASCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-FLD1 = ITAB_TMP-FLD1.
ITAB2-NUM1 = ITAB_TMP-NUM1.
SORT ITAB_TMP BY FLD1 ASCENDING
NUM2 DESCENDING.
READ TABLE ITAB_TMP INDEX 1.
ITAB2-NUM2 = ITAB_TMP-NUM2.
APPEND ITAB2.
ENDIF.
ENDLOOP.
LOOP AT ITAB2.
WRITE: / ITAB2-FLD1,
ITAB2-NUM1,
ITAB2-NUM2.
ENDLOOP. >
‎2008 Aug 12 3:47 AM
Gaurav,
Your code also doesn't work for 3 or more records.
<
&----
*& Report ZTEST_SDN
*&
&----
*&
*&
&----
REPORT ztest_sdn.
TYPES:
BEGIN OF x_tab,
f1 TYPE c LENGTH 1,
f2 TYPE i,
f3 TYPE i,
END OF x_tab.
DATA:
i_tab TYPE STANDARD TABLE OF x_tab INITIAL SIZE 0,
wa_tab TYPE x_tab.
DEFINE append_data.
wa_tab-f1 = &1.
wa_tab-f2 = &2.
wa_tab-f3 = &3.
append wa_tab to i_tab.
END-OF-DEFINITION.
append_data: 'A' '10' '30',
'A' '20' '50',
'A' '00' '100',
'B' '20' '40',
'B' '10' '90',
'C' '0' '40',
'C' '20' '90'.
IF i_tab[] IS NOT INITIAL.
SORT i_tab BY f1 ASCENDING f2 ASCENDING f3 DESCENDING.
LOOP AT i_tab INTO wa_tab.
WRITE:/1 'WA_TAB-F1:',wa_tab-f1,
20 'WA_TAB-F2:',wa_tab-f2 LEFT-JUSTIFIED,
40 'WA_TAB-F3:',wa_tab-f3 LEFT-JUSTIFIED.
ENDLOOP.
WRITE:/ sy-uline.
DELETE ADJACENT DUPLICATES FROM i_tab COMPARING f1.
LOOP AT i_tab INTO wa_tab.
WRITE:/1 'WA_TAB-F1:',wa_tab-f1,
20 'WA_TAB-F2:',wa_tab-f2 LEFT-JUSTIFIED,
40 'WA_TAB-F3:',wa_tab-f3 LEFT-JUSTIFIED.
ENDLOOP.
ENDIF.
>