2014 Apr 16 1:03 PM
Hi Folks,
I need some help.
My internal table data is -
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 5 | PED | |
| 1038152 | 5 | PED | |
| 1038152 | 5 | PED | |
| 1038152 | 5 | PED | |
Now I want to change the order to
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 5 | PED | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 5 | PED | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 5 | PED | |
| 1038152 | 2 | KEY_NUMBER | |
| 1038152 | 3 | MEDIUM | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | |
| 1038152 | 5 | PED | |
Pls let me know how can I achieve this ?
2014 Apr 16 1:24 PM
Add another field to your internal table of type integer. Where the text is KEY_NUMBER, give this field a value of 1. Where it is MEDIUM, give your field value 2, and so forth.
Then sort by your new field.
2014 Apr 16 4:44 PM
2014 Apr 16 1:25 PM
Hello Waseem,
Just curious, do you need all the duplicate records?
Regards,
Anubhab
2014 Apr 16 1:52 PM
I have another column where the relevant data is present so no duplication here.
2014 Apr 16 1:31 PM
If this is your only need then do like this.
1. sort internal table using middle field as i see it's already sorted.
2. delete adjacent duplicates from internal table, then you will get internal table with just 4 lines.
3. append this internal table to another table 4 times or to the same table 3 times.
if you have another need then post the actual question, rather than like this. People may be able to help you in better way with the original need.
regards
Dhananjay
2014 Apr 16 1:53 PM
2014 Apr 16 1:42 PM
Hi,
since the second field is repeating ,take another internal table and fill it in order 2,3,4,5.
data :begin of my_table
field_2 type i ,
end of my_table.
data: wa type i.
wa = '2'.
append wa into my_table.
wa = '3'.
append wa into my_table.
wa = '4'.
append wa into my_table.
wa = '5'.
append wa into my_table.
loop at your_table into wa_your.
loop at my_table into wa_table.
read your_table into wa_final with key your_table-field_2 = wa_table-field_2.
append wa_final to lt_final. *this table contains ur sorted record.
endloop.
endloop.
hope it helps.
2014 Apr 16 1:51 PM
No the values are not fixed like 2,3,4,5 they will changing dynamically.
2014 Apr 16 1:50 PM
Hi All,
Actually there is one more field in the table, the data is
| A1 | Sequence | A3 | A4 | |
| 1038152 | 2 | KEY_NUMBER | XyZ | |
| 1038152 | 2 | KEY_NUMBER | 123 | |
| 1038152 | 2 | KEY_NUMBER | qwjh | |
| 1038152 | 2 | KEY_NUMBER | glmn | |
| 1038152 | 3 | MEDIUM | 7893 | |
| 1038152 | 3 | MEDIUM | wedfd | |
| 1038152 | 3 | MEDIUM | asdjch | |
| 1038152 | 3 | MEDIUM | dvh | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | 6498 | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | asc | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | cip | |
| 1038152 | 4 | CERTIFICATE_LANGUAG | asdf | |
| 1038152 | 5 | PED | 6798 | |
| 1038152 | 5 | PED | quw | |
| 1038152 | 5 | PED | 39785 | |
| 1038152 | 5 | PED | mxcnb | |
and the value under sequence is not fixed it is dynamic and can be from 1 to n.
So please let me know in such scenario how to achieve this.
2014 Apr 16 1:51 PM
Hello Waseem,
Create a dummy internal table with the same type as your first internal table.
Now put a loop on the first internal table. IF wa_table1-second_column = 2. Append that work area to the dummy internal table.
Repeat the same procedure for second_column = 3, second_column = 4 and second_column = 5.
You will have the data in the dummy internal table now.
Regards,
Dnyanesh.
2014 Apr 16 1:56 PM
Hi Dnyanesh,
The sequence fields are not fixed!
Pls check my post once again
2014 Apr 16 2:00 PM
Hi Was,
Hope it will meet your requirement .
Regards,
John.
2014 Apr 16 2:33 PM
Hi Was,
If you have any other unique column, Then pass all the sequence of data to dynamic internal table. then do like below,
loop at it_seq2 into wa_seq2.
lv_index = sy-tabix.
read table it_seq3 into wa_seq3 index lv_index.
read table it_seq4 as above
read table it_seq5 as above
append wa_final to it_final.
endloop.
Hope it will helpful to you.
Regards,
John.
2014 Apr 16 2:27 PM
Hi Waseem,
Try with below logic.
*&---------------------------------------------------------------------*
*& Report ZSORT_DATA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsort_data.
TYPES: BEGIN OF ly_data,
fld3(25),
fld1(10),
fld2(1),
fld4(10),
END OF ly_data.
DATA: lt_data TYPE STANDARD TABLE OF ly_data.
DATA: ls_data TYPE ly_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
DATA: lt_data_temp TYPE STANDARD TABLE OF ly_data.
DATA: ls_data_temp TYPE ly_data.
DATA: ls_data_temp1 TYPE ly_data.
lt_data_temp = lt_data.
LOOP AT lt_data INTO ls_data..
WRITE:/ ls_data-fld3, ls_data-fld1, ls_data-fld2.
ENDLOOP.
WRITE:/ 'AFter Changing' COLOR 3.
LOOP AT lt_data INTO ls_data.
LOOP AT lt_data_temp INTO ls_data_temp.
ls_data_temp1 = ls_data_temp.
AT NEW fld3.
ls_data-fld4 = 'X'.
MODIFY lt_data FROM ls_data INDEX sy-tabix TRANSPORTING fld4.
CLEAR: ls_data_temp.
ls_data_temp = ls_data_temp1.
WRITE:/ ls_data_temp-fld3, ls_data_temp-fld1,ls_data_temp-fld2.
ENDAT.
ENDLOOP.
DELETE lt_data WHERE fld4 = 'X'.
lt_data_temp = lt_data.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Report ZSORT_DATA
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsort_data.
TYPES: BEGIN OF ly_data,
fld3(25),
fld1(10),
fld2(1),
fld4(10),
END OF ly_data.
DATA: lt_data TYPE STANDARD TABLE OF ly_data.
DATA: ls_data TYPE ly_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '2'.
ls_data-fld3 = 'KEY_NUMBER'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '3'.
ls_data-fld3 = 'MEDIUM'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
ls_data-fld1 = '1038152'.
ls_data-fld2 = '4'.
ls_data-fld3 = 'CERTIFICATE_LANGUAG'.
APPEND ls_data TO lt_data.
DATA: lt_data_temp TYPE STANDARD TABLE OF ly_data.
DATA: ls_data_temp TYPE ly_data.
DATA: ls_data_temp1 TYPE ly_data.
lt_data_temp = lt_data.
LOOP AT lt_data INTO ls_data..
WRITE:/ ls_data-fld3, ls_data-fld1, ls_data-fld2.
ENDLOOP.
WRITE:/ 'AFter Changing' COLOR 3.
DATA: i TYPE i.
LOOP AT lt_data INTO ls_data.
i = i + 1.
ls_data-fld4 = i.
MODIFY lt_data FROM ls_data INDEX sy-tabix.
AT END OF fld1.
CLEAR i.
ENDAT.
ENDLOOP.
SORT lt_data BY fld4.
LOOP AT lt_data INTO ls_data..
WRITE:/ ls_data-fld3, ls_data-fld1, ls_data-fld2.
ENDLOOP.
Check the attached output screen shot.
Regards,
Rajesh
2014 Apr 16 3:42 PM
2014 Apr 16 5:09 PM
About the second method, relative order of lines is not well defined when you are sorting only on basis of fld4. Use SORT STABLE instead.
2014 Apr 18 8:19 AM
Hi Waseem,
Thanks for the confirmation.
Please close the ticket by marking as Correct/Helpful/.... .
Regards,
Rajesh