2016-09-12 6 views
0

Моя проблема не в реальном программировании.Сделать математические операции над сгруппированным столом

У меня есть упражнение на языке ABAP, но язык не очень важен.

Во всяком случае, у меня есть таблица:

see the picture

мне нужно сделать общую стоимость позиции (после выбора, очевидно). Затем таблица будет сгруппирована по двум полям (MATNR и BUKRS), поэтому мне нужно знать для каждой группы общую стоимость MAX, общую стоимость MIN и общую стоимость СРЕДНЕГО из позиций.

Однако мне нужен простой алгоритм для решения этой проблемы (псевдокод).

Надеюсь, я был чист.

+0

Я думаю, было бы полезно, если бы читатели увидели, как будет выглядеть желаемый результат. Это похоже на цикл while, и несколько массивов будут делать трюк, но я все еще не уверен, что вас спрашивают. –

+1

Звучит достаточно ясно - что вы пробовали до сих пор? – vwegert

ответ

0

Для скоплений таблиц я считаю, что функции AT внутри LOOP очень удобны.

Отсортируйте свои поля в соответствии с вашими размерами и отсортируйте их по возрастанию или по убыванию.

Порядок полей здесь очень важен, поскольку AT ищет изменения в указанном поле и все поля слева от него в той же строке. Таким образом, вы обрабатываете группу для группы и добавляете результат агрегирования групп в таблицу результатов.

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.