对分组 table 进行数学运算
Make math operations on a grouped table
我的问题不在于真正的编程语言。
我有一个 ABAP 语言练习,但语言不是很重要。
反正我有一个table:
我需要计算仓位的总成本(显然在 select 之后)。
然后,table 将按两个字段(MATNR 和 BUKRS)分组,因此我需要知道每个组的总成本 MAX、总成本 MIN 和总成本 AVERAGE。
但是我需要一个简单的算法来解决这个问题(伪代码)。
我希望我说的很清楚。
对于 table 聚合,我发现 LOOP 中的 AT 函数非常方便。
根据您需要的维度对您的字段进行排序,并对值进行升序或降序排序。
字段的顺序在这里非常重要,因为 AT 查找指定字段中的更改以及它在同一行中剩余的所有字段。因此,您处理一个组一个组并将组聚合的结果附加到您的结果 table.
LOOP AT lt_itab ASSIGNING <ls_itab>.
AT NEW bukrs. "at first entry of combination matnr, bukrs
ls_agg-matnr = <ls_itab>-matnr.
ls_agg-bukrs = <ls_itab>-bukrs.
ENDAT.
TRY.
ADD <ls_itab>-amount TO lf_sum.
CATCH cx_sy_arithmetic_overflow.
lf_sum = 9999.
ENDTRY.
lf_count = lf_count + 1.
IF <ls_itab>-amount > lf_max.
lf_max = <ls_itab>-amount.
ENDIF.
AT END OF bukrs. "after last entry of combination matnr,bukrs
ls_agg-avg = lf_sum / lf_count.
ls_agg-max = lf_max.
APPEND ls_agg TO lt_agged.
CLEAR: ls_agg, lf_sum, lf_count, lf_max.
ENDAT.
ENDLOOP.
我的问题不在于真正的编程语言。
我有一个 ABAP 语言练习,但语言不是很重要。
反正我有一个table:
我需要计算仓位的总成本(显然在 select 之后)。 然后,table 将按两个字段(MATNR 和 BUKRS)分组,因此我需要知道每个组的总成本 MAX、总成本 MIN 和总成本 AVERAGE。
但是我需要一个简单的算法来解决这个问题(伪代码)。
我希望我说的很清楚。
对于 table 聚合,我发现 LOOP 中的 AT 函数非常方便。
根据您需要的维度对您的字段进行排序,并对值进行升序或降序排序。
字段的顺序在这里非常重要,因为 AT 查找指定字段中的更改以及它在同一行中剩余的所有字段。因此,您处理一个组一个组并将组聚合的结果附加到您的结果 table.
LOOP AT lt_itab ASSIGNING <ls_itab>.
AT NEW bukrs. "at first entry of combination matnr, bukrs
ls_agg-matnr = <ls_itab>-matnr.
ls_agg-bukrs = <ls_itab>-bukrs.
ENDAT.
TRY.
ADD <ls_itab>-amount TO lf_sum.
CATCH cx_sy_arithmetic_overflow.
lf_sum = 9999.
ENDTRY.
lf_count = lf_count + 1.
IF <ls_itab>-amount > lf_max.
lf_max = <ls_itab>-amount.
ENDIF.
AT END OF bukrs. "after last entry of combination matnr,bukrs
ls_agg-avg = lf_sum / lf_count.
ls_agg-max = lf_max.
APPEND ls_agg TO lt_agged.
CLEAR: ls_agg, lf_sum, lf_count, lf_max.
ENDAT.
ENDLOOP.