Loop at Group BY命令

1. Loop at Group BY命令

1. Loop at Group BY命令

IF~ELSE命令の代わりとしてCOND命令を使用する事ができるようになりました。

処理を行いたいグループキーを設定し(①)、外側のループ(赤)にてグループキー毎の処理がされます。
例えば、2項目(key1,key2)をグループキーとし、その2項目が同じレコードが5件存在しても1 回のみが行われます。

次に、グループキーをフィールドシンボルに割り当て(②)、「LOOP AT GROUP(青)」を使用して、
そのグループのレコード分(③)LOOP処理が行われ、グループ毎の処理がされます。
これにより、同じグループキーのレコード5件がLOOPされることがわかります。

また、GROUP SIZE および GROUP INDEX を指定する事により、
グループ毎に何明細存在するか、全部で何グループが内部テーブルに存在するかが計算されます。

■ Loop at Group BY確認の事前準備

*従業員データの型定義
TYPES: BEGIN OF ty_employee,
           name TYPE char30,
           role TYPE char30,
           age  TYPE i,
       END OF ty_employee,
*従業員内部テーブルの型定義
ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name.
*従業員内部テーブルの定義+データのセット
	DATA(gt_employee) = VALUE ty_employee_t(
                        ( name = 'John'   role = 'ABAP guru'     age = 34 )
                        ( name = 'Alice'  role = 'FI Consultant' age = 42 )
                        ( name = 'Barry'  role = 'ABAP guru'     age = 55 )
                        ( name = 'Mary'   role = 'FI Consultant' age = 37 )
                        ( name = 'Arthur' role = 'ABAP guru'     age = 34 )
                        ( name = 'Mandy'  role = 'SD Consultant' age = 64 ) ).
*計算用ワークの定義
	DATA: gv_tot_age TYPE i,
          gv_avg_age TYPE decfloat34.

<外側赤ループ:1件目の処理>

処理を行いたいグループキーは項目roleとなるので、外側のループ(赤)が1件目を処理します。

次に、「LOOP AT GROUP(青)」を使用して、roleが同じグループ「ABAP guru」のレコードに対して
LOOP処理が行われ、メンバーの年齢合計(123歳=34歳+55歳+34歳)が求められます。

また、<group>-SIZEには、該当する明細数である3が求められ、
グループ毎の平均年齢が、123歳 / 3人=41歳と求まります。

<外側赤ループ:2件目の処理>

次のグループキーは 「FI Consultant」となり、外側のループ(赤)が2件目を処理します。

「LOOP AT GROUP(青)」で対象となるのは、roleが「FI Consultant」のレコードに対してLOOP処理が行われ、メンバーの年齢合計(79歳=42歳+37歳)が求められます。

また、<group>-SIZEには、該当する明細数である2が求まり、グループ毎の平均年齢が、
79歳/2人=39.5歳と求まります。

<外側赤ループ:3件目の処理>

次のグループキーは 「SD Consultant」となり、外側のループ(赤)が3件目を処理します。

「LOOP AT GROUP(青)」で対象となるのは、roleが 「SD Consultant」のレコードに対してLOOP処理が行われ、メンバーの年齢合計(64歳 ※1レコード)が求められます。

また、<group>-SIZEには、該当する明細数である1が求まり、
グループ毎の平均年齢が、64歳/1人=64歳と求まります。

■結果画面


NEXT>> 12章 ABAP 7.4から導入された構文⑤