Reputation: 208
I have an internal table consisting the ff structure.
SO Customer Materialno Materialgroup2 Liters
001 James 1 GroupA 5
001 James 2 GroupA 10
001 James 3 GroupB 20
002 John 2 GroupA 10
002 John 3 GroupA 10
002 John 4 GroupB 20
002 John 5 GroupB 5
I need to add it by customer, billing doc, and by their material group2. Now the final output of the internal table should be like this.
SO Customer MaterialGroup2 Liters
001 James GroupA 15
001 James GroupB 20
002 John GroupA 20
002 John GroupB 25
Upvotes: 0
Views: 2140
Reputation: 5051
rt_result = VALUE #( FOR GROUPS group OF ls_source IN it_source
GROUP BY ( so = ls_source-so
customer = ls_source-customer
material_group = ls_source-material_group )
( so = group-so
customer = group-customer
material_group = group-material_group
liters = REDUCE #( INIT lv_liters = 0
FOR ls_member IN GROUP group
NEXT lv_liters = lv_liters + ls_member-liters ) ) ).
Upvotes: 2
Reputation: 241
REPORT ztest.
TYPES:
BEGIN OF ts_input,
so TYPE char3,
customer TYPE char5,
materialno TYPE i,
materialgroup TYPE char6,
liters TYPE i,
END OF ts_input,
BEGIN OF ts_output,
so TYPE char3,
customer TYPE char5,
materialgroup TYPE char6,
liters TYPE i,
END OF ts_output.
DATA:
lv_liters TYPE i,
gt_input TYPE STANDARD TABLE OF ts_input,
gs_input TYPE ts_input,
gt_temp TYPE STANDARD TABLE OF ts_output,
gs_temp TYPE ts_output,
gt_output TYPE STANDARD TABLE OF ts_output,
gs_output TYPE ts_output.
START-OF-SELECTION.
gs_input-so = '001'.
gs_input-customer = 'james'.
gs_input-materialno = 1.
gs_input-materialgroup = 'GroupA'.
gs_input-liters = 5.
APPEND gs_input TO gt_input.
gs_input-so = '001'.
gs_input-customer = 'james'.
gs_input-materialno = 2.
gs_input-materialgroup = 'GroupA'.
gs_input-liters = 10.
APPEND gs_input TO gt_input.
gs_input-so = '001'.
gs_input-customer = 'james'.
gs_input-materialno = 3.
gs_input-materialgroup = 'GroupB'.
gs_input-liters = 20.
APPEND gs_input TO gt_input.
gs_input-so = '002'.
gs_input-customer = 'john'.
gs_input-materialno = 2.
gs_input-materialgroup = 'GroupA'.
gs_input-liters = 10.
APPEND gs_input TO gt_input.
gs_input-so = '002'.
gs_input-customer = 'john'.
gs_input-materialno = 3.
gs_input-materialgroup = 'GroupA'.
gs_input-liters = 10.
APPEND gs_input TO gt_input.
gs_input-so = '002'.
gs_input-customer = 'john'.
gs_input-materialno = 4.
gs_input-materialgroup = 'GroupB'.
gs_input-liters = 20.
APPEND gs_input TO gt_input.
gs_input-so = '002'.
gs_input-customer = 'john'.
gs_input-materialno = 5.
gs_input-materialgroup = 'GroupB'.
gs_input-liters = 5.
APPEND gs_input TO gt_input.
" move to temp. table, skip MaterialNo
LOOP AT gt_input INTO gs_input.
gs_temp-so = gs_input-so.
gs_temp-customer = gs_input-customer.
gs_temp-materialgroup = gs_input-materialgroup.
gs_temp-liters = gs_input-liters.
APPEND gs_temp TO gt_temp.
ENDLOOP.
SORT gt_temp ASCENDING BY so customer materialgroup.
LOOP AT gt_temp INTO gs_temp.
AT NEW materialgroup.
CLEAR lv_liters.
ENDAT.
lv_liters = lv_liters + gs_temp-liters.
AT END OF materialgroup.
gs_output-so = gs_temp-so.
gs_output-customer = gs_temp-customer.
gs_output-materialgroup = gs_temp-materialgroup.
gs_output-liters = lv_liters.
APPEND gs_output TO gt_output.
ENDAT.
ENDLOOP.
Upvotes: 1