!--a11y-->

以下の命令を使用すると、内部テーブルのエントリを集計することができます。
COLLECT <wa> INTO <itab>.
<itab> の行データ型はフラット構造でなければならず、テーブルキーの一部になっていないすべての項目のデータ型が 数値データ型 (F 、I 、P) である必要があります。行データ型と互換性のある作業領域に追加する行を指定します。
行が挿入されるときに、そのキーと一致するテーブルエントリがすでにあるかどうかがチェックされます。一致するエントリがテーブルにない場合は、COLLECT 命令は新しい行を挿入したのと同じ効果があります。同じキーを持つエントリがすでにある場合は、COLLECT 命令で新しい行はアペンドされませんが、作業領域の数値項目の内容が既存のエントリの数値項目の内容に追加されます。
集計テーブルを作成する場合は、COLLECT 命令のみを使用してください。ほかの命令を使用してテーブルエントリを挿入すると、重複エントリが発生することがあります。
行は、以下のように内部テーブルに追加されます。
キ 標準テーブル
COLLECT 命令が標準テーブルにデータを書き込むための最初の命令である場合は、テーブルの既存のエントリを識別する一時ハッシュ管理が作成されます。別の命令によってキー項目の内容が変更されるか、内部テーブル内の行の順序が変更されるまで、このハッシュ管理は保持されます。その後、ライナー検索によって既存のエントリが検索されます。操作の実行時間は、既存のテーブルエントリの数と正比例して増加します。システム項目 SY-TABIX には、COLLECT 命令で挿入または変更された行の索引が含まれています。
キ ソートテーブル
バイナリ検索によって既存の行の位置が特定されます。操作の実行時間は、既存の行の数に対数比例して増加します。システム項目SY-TABIX には、COLLECT 命令で挿入または変更された行の索引が含まれています。
キ ハッシュテーブル
内部テーブルのハッシュアルゴリズムを使用して既存の行が検索されます。ハッシュテーブルにはライナー索引がないため、COLLECT 命令のあと、システム項目 SY-TABIX の値は 0 になります。

DATA: BEGIN OF LINE,
COL1(3) TYPE C,
COL2(2) TYPE N,
COL3 TYPE
I,
END OF LINE.
DATA ITAB LIKE SORTED
TABLE OF LINE
WITH NON-UNIQUE
KEY COL1 COL2.
LINE-COL1 =
'abc'.LINE-COL2 = '12'.LINE-COL3 = 3.
COLLECT LINE INTO ITAB.
WRITE /
SY-TABIX.
LINE-COL1 =
'def'.LINE-COL2 = '34'.LINE-COL3 = 5.
COLLECT LINE INTO ITAB.
WRITE /
SY-TABIX.
LINE-COL1 =
'abc'.LINE-COL2 = '12'.LINE-COL3 = 7.
COLLECT LINE INTO ITAB.
WRITE /
SY-TABIX.
LOOP AT ITAB INTO
LINE.
WRITE: / LINE-COL1, LINE-COL2, LINE-COL3.
ENDLOOP.
出力は以下のようになります。
1
2
1
abc 12 10
def 34 5
この例では、ソートテーブルにデータが書き込まれます。最初の 2 つの COLLECT 命令は、通常の挿入命令と同様に機能します。3 番目の COLLECT 命令では、ITAB の最初の行が変更されます。以下の図は、この 3 つのステップを示しています。