2009 Jun 24 10:51 AM
Dear Support ,
I would like to transpose one internal table , for example :
Column : MATERIAL , QTY , DATE
MA1 , 100 , 2009-01-01
MA2 , 200 , 2009-01-01
MA3 , 200 , 2009-03-02
After the convertion , it should be like that :
Column : MATERIAL , 2009-01-01 , 2009-03-02
MA1 100 0
MA2 200 0
MA3 0 200
As i know , in SQL it is very easy to do that , just like :
select sum(case ' xxx ' when ' xxx ' .... ) ....
But how to do that in ABAP ?
Thanks .
Carlos Zhang
2009 Jun 24 11:06 AM
2009 Jun 24 11:06 AM
2009 Jun 24 11:26 AM
Hi,
Please find teh code as follows
TYPES : BEGIN OF t_itab,
mat TYPE matnr,
qty TYPE menge_d,
dat TYPE datum,
END OF t_itab.TYPES : BEGIN OF t_datcol,
dat TYPE datum,
col TYPE i,
END OF t_datcol.
DATA : tbl_obj TYPE REF TO data,
line_obj TYPE REF TO data.
DATA : lv_field TYPE fieldname.
DATA : wa TYPE t_itab,
wa_col TYPE t_datcol.
DATA: itab TYPE STANDARD TABLE OF t_itab,
itab_dt TYPE STANDARD TABLE OF t_datcol.
DATA : fcat TYPE lvc_t_fcat.
DATA : fcat_wa TYPE lvc_s_fcat.
DATA: cntr TYPE i.
FIELD-SYMBOLS : <fs> TYPE t_datcol,
<fs_mainitab> TYPE STANDARD TABLE,
<fs_line> TYPE ANY,
<fs_field> TYPE ANY.
wa-mat = 'M1'.
wa-qty = 100.
wa-dat = '20090101'.
APPEND wa TO itab.
wa_col-dat = '20090101'.
APPEND wa_col TO itab_dt.
wa-mat = 'M2'.
wa-qty = 200.
wa-dat = '20090101'.
APPEND wa TO itab.
wa_col-dat = '20090101'.
APPEND wa_col TO itab_dt.
wa-mat = 'M3'.
wa-qty = 200.
wa-dat = '20090302'.
APPEND wa TO itab.
wa_col-dat = '20090302'.
APPEND wa_col TO itab_dt.
SORT itab_dt BY dat.
DELETE ADJACENT DUPLICATES FROM itab_dt COMPARING dat.
fcat_wa-fieldname = 'MAT'.
fcat_wa-ref_field = 'MATNR'.
fcat_wa-ref_table = 'MARA'.
APPEND fcat_wa TO fcat.
LOOP AT itab_dt assigning <fs>.
<fs>-col = sy-tabix.
CONCATENATE 'F_' <fs>-dat INTO lv_field.
fcat_wa-fieldname = lv_field.
fcat_wa-ref_field = 'MENGE'.
fcat_wa-ref_table = 'MSEG'.
APPEND fcat_wa TO fcat.
ENDLOOP.
now make your main internal table as required
dynamic table only incase if you do not know the dates
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = fcat
IMPORTING
ep_table = tbl_obj
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ASSIGN tbl_obj->* TO <fs_mainitab>.
CREATE DATA line_obj LIKE LINE OF <fs_mainitab>.
ASSIGN line_obj->* TO <fs_line> .
IF <fs_mainitab> IS ASSIGNED AND <fs_line> IS ASSIGNED.
LOOP AT itab INTO wa.
ASSIGN COMPONENT 'MAT' OF STRUCTURE <fs_line> TO <fs_field>.
IF <fs_field> IS ASSIGNED.
<fs_field> = wa-mat.
UNASSIGN <fs_field> .
READ TABLE itab_dt INTO wa_col
WITH KEY dat = wa-dat.
IF sy-subrc EQ 0.
cntr = wa_col-col + 1.
ASSIGN COMPONENT cntr OF STRUCTURE <fs_line> TO <fs_field>.
IF <fs_field> IS ASSIGNED.
<fs_field> = wa-qty.
COLLECT <fs_line> INTO <fs_mainitab>.
UNASSIGN <fs_field> .
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
Regards,
Ankur Parab
Edited by: Ankur Parab on Jun 24, 2009 4:04 PM
2009 Jun 24 11:38 AM
hi,
I do not understand why the formatting is not happening.
regards,
Ankur Parab
2009 Jun 24 2:20 PM
2009 Jun 24 3:21 PM
Hi,
I am not sure whether it can be done via an SQL statement.
You can take data into your internal table and then use my code to transpose.
Regards,
Ankur Parab
2009 Jun 25 7:23 AM
Formatting is not happening because there is a 2500 character limit on every post.
Text in excess of that would get truncated automatically. As a result of which, your ending tag {{code}} got deleted, and formatting didn't happen.