REPORT ZTEST.
TYPES:BEGIN OF TY_DATA,
NUMBER TYPE C,
PRICE TYPE FINS_VOCUR12,
CATEGORY(20) TYPE C,
END OF TY_DATA.
TYPES:BEGIN OF TY_SUM,
NUMBER TYPE C,
PRICE TYPE FINS_VOCUR12,
END OF TY_SUM.
DATA: LT_DATA TYPE TABLE OF TY_DATA,
LT_SUM1 TYPE TABLE OF TY_SUM,
LS_SUM1 TYPE TY_SUM,
* LT_SUM2 TYPE TABLE OF TY_SUM,
* LS_SUM2 TYPE TY_SUM,
LT_SUM3 TYPE TABLE OF TY_SUM,
LS_SUM3 TYPE TY_SUM,
LT_SUM4 TYPE TABLE OF TY_SUM,
LS_SUM4 TYPE TY_SUM,
LT_SUM5 TYPE TABLE OF TY_SUM,
LS_SUM5 TYPE TY_SUM.
DATA: LV_SUM TYPE I.
LT_DATA = VALUE #(
( NUMBER = 'a' PRICE = 23 CATEGORY = 'xxx')
( NUMBER = 'a' PRICE = 23 CATEGORY = 'xxx')
( NUMBER = 'a' PRICE = 23 CATEGORY = 'xxx')
( NUMBER = 'b' PRICE = 23 CATEGORY = 'xxx')
( NUMBER = 'b' PRICE = 23 CATEGORY = 'AAA')
( NUMBER = 'b' PRICE = 111 CATEGORY = 'AAA')
( NUMBER = 'b' PRICE = 12 CATEGORY = 'AAA')
( NUMBER = 'c' PRICE = 23 CATEGORY = 'AAA')
( NUMBER = 'c' PRICE = 21 CATEGORY = 'AAA')
( NUMBER = 'c' PRICE = 11 CATEGORY = 'AAA')
( NUMBER = 'c' PRICE = 11 CATEGORY = 'AAA')
).
**1.
*LOOP AT LT_DATA INTO DATA(LS_DATA).
* LS_SUM1 = VALUE #(
* NUMBER = LS_DATA-NUMBER
* PRICE = LS_DATA-PRICE ).
*
* COLLECT LS_SUM1 INTO LT_SUM1.
*ENDLOOP.
*
*CL_DEMO_OUTPUT=>DISPLAY( LT_SUM1 ).
*
*" 2.
*SELECT NUMBER,SUM( PRICE ) AS PRICE
* FROM @LT_DATA AS A
* GROUP BY NUMBER
* ORDER BY NUMBER ASCENDING
* INTO TABLE @DATA(LT_SUM2).
*
*CL_DEMO_OUTPUT=>DISPLAY( LT_SUM2 ).
*
**3.
*
*LOOP AT LT_DATA INTO DATA(LS_DATA3) GROUP BY LS_DATA3-NUMBER ASSIGNING FIELD-SYMBOL(<KEY>).
* LOOP AT GROUP <KEY> ASSIGNING FIELD-SYMBOL(<KEY_MEMBER>).
* LS_SUM3-NUMBER = <KEY_MEMBER>-NUMBER.
* LV_SUM = <KEY_MEMBER>-PRICE + LV_SUM.
* ENDLOOP.
* LS_SUM3-PRICE = LV_SUM.
* APPEND LS_SUM3 TO LT_SUM3.
* CLEAR: LV_SUM,LS_SUM3.
*ENDLOOP.
*
*CL_DEMO_OUTPUT=>DISPLAY( LT_SUM3 ).
*4 使用COLLECT 注意只能汇总数量金额字段 其他无关字段需要Clear 或者放到另一个结构中汇总
*LOOP AT LT_DATA INTO DATA(LS_DATA).
* MOVE-CORRESPONDING LS_DATA TO LS_SUM4.
* COLLECT LS_SUM4 INTO LT_SUM4.
*ENDLOOP.
*
*
*CL_DEMO_OUTPUT=>DISPLAY( LT_SUM4 ).
*5新语法汇总
*根据表1的订单号汇总表2 相同订单号的值到表1某个字段
LT_SUM5 = VALUE #(
( NUMBER = 'a')
( NUMBER = 'b' )
( NUMBER = 'c' ) ).
LOOP AT LT_SUM5 ASSIGNING FIELD-SYMBOL(<FS_OUT>).
<FS_OUT>-PRICE = REDUCE #( INIT lv_PRICE TYPE FINS_VOCUR12
FOR LS_DATA IN LT_DATA
WHERE ( NUMBER = <FS_OUT>-NUMBER )
NEXT lv_PRICE = lv_PRICE + LS_DATA-PRICE ).
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( LT_SUM5 ).