Loop at Group BY命令
1. Loop at Group BY命令
1. Loop at Group BY命令
IF~ELSE命令の代わりとしてCOND命令を使用する事ができるようになりました。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/4328bfee89e736101c63d318260ddc71.png)
処理を行いたいグループキーを設定し(①)、外側のループ(赤)にてグループキー毎の処理がされます。
例えば、2項目(key1,key2)をグループキーとし、その2項目が同じレコードが5件存在しても1 回のみが行われます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/c28cbc1793f6210ca30a4115fc4c4694.png)
次に、グループキーをフィールドシンボルに割り当て(②)、「LOOP AT GROUP(青)」を使用して、
そのグループのレコード分(③)LOOP処理が行われ、グループ毎の処理がされます。
これにより、同じグループキーのレコード5件がLOOPされることがわかります。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/ba4ba9b38d4b01badb6560454193f132.png)
また、GROUP SIZE および GROUP INDEX を指定する事により、
グループ毎に何明細存在するか、全部で何グループが内部テーブルに存在するかが計算されます。
■ Loop at Group BY確認の事前準備
![](https://kanda-it-school-kensyu.com/wp-content/uploads/09f05c4f17d38ab1b0b74c11aa94990e.png)
*従業員データの型定義
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.
![](https://kanda-it-school-kensyu.com/wp-content/uploads/9c68a8c4f9465d80b1b41b5adb82e579.png)
<外側赤ループ:1件目の処理>
処理を行いたいグループキーは項目roleとなるので、外側のループ(赤)が1件目を処理します。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/c22ccd6ed1343d17229b101284c1c861.png)
次に、「LOOP AT GROUP(青)」を使用して、roleが同じグループ「ABAP guru」のレコードに対して
LOOP処理が行われ、メンバーの年齢合計(123歳=34歳+55歳+34歳)が求められます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/8fae9000b895cd36fe12c710661b7d2c.png)
また、<group>-SIZEには、該当する明細数である3が求められ、
グループ毎の平均年齢が、123歳 / 3人=41歳と求まります。
<外側赤ループ:2件目の処理>
次のグループキーは 「FI Consultant」となり、外側のループ(赤)が2件目を処理します。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/21504d26eca613c04aa47696f7a3bdd3.png)
「LOOP AT GROUP(青)」で対象となるのは、roleが「FI Consultant」のレコードに対してLOOP処理が行われ、メンバーの年齢合計(79歳=42歳+37歳)が求められます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/6cacbc44f22e6a912f3977ef0c13721d.png)
また、<group>-SIZEには、該当する明細数である2が求まり、グループ毎の平均年齢が、
79歳/2人=39.5歳と求まります。
<外側赤ループ:3件目の処理>
次のグループキーは 「SD Consultant」となり、外側のループ(赤)が3件目を処理します。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/7e3d3fc3adff5827fad285f597665d5d.png)
「LOOP AT GROUP(青)」で対象となるのは、roleが 「SD Consultant」のレコードに対してLOOP処理が行われ、メンバーの年齢合計(64歳 ※1レコード)が求められます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/2ead3191bbba2ac28b5d6f88511599a7.png)
また、<group>-SIZEには、該当する明細数である1が求まり、
グループ毎の平均年齢が、64歳/1人=64歳と求まります。
■結果画面
![](https://kanda-it-school-kensyu.com/wp-content/uploads/8ebc4002f70a8c3924ce1387f94aaed8.png)