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

Row and Column transpose question

carlos_zhang3
Participant
0 Likes
989

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
938

Check this thread, there is an example code for printing transpose of internal table.

[;

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

6 REPLIES 6
Read only

Former Member
0 Likes
939

Check this thread, there is an example code for printing transpose of internal table.

[;

Read only

Former Member
0 Likes
938

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

Read only

Former Member
0 Likes
938

hi,

I do not understand why the formatting is not happening.

regards,

Ankur Parab

Read only

0 Likes
938

is it possible to do that by SQL statement ?

Read only

0 Likes
938

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

Read only

0 Likes
938

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.