新規記事の投稿を行うことで、非表示にすることが可能です。
2020年02月10日
【ABAP】SORT命令―内部テーブルのソート
内部テーブルを昇順・降順での並び替えを行うSORT命令について解説します。
SORT命令は単純な並び替えを行うだけのように理解してしまいがちですが、実は結構奥が深い(ソートの優先順や、昇順・降順の混合など)命令です。
目次
1 SORT命令:構文ルール
1.1 SORT命令の処理内容
1.2 ASCENDING / DESCENDINGオプション
1.3 BYオプション
1.4 昇順と降順の組み合わせ
1 SORT命令:構文ルール
1.1 SORT命令の処理内容
1.2 ASCENDING / DESCENDINGオプション
1.3 BYオプション
1.4 昇順と降順の組み合わせ
1 SORT命令:構文ルール
SORT(内部テーブル).
構文は非常に簡単です。
オペランド部に並び替えを行いたい内部テーブルを指定するだけです。
(ただし、オプションなしのこのままの形で利用することはあまりありません。)
指定する内部テーブルは、標準テーブルかハッシュテーブルでなければなりません。
つまりソートテーブルをソートすることはできません。
ソートテーブルを指定してしまう場合、プログラム実行時にショートダンプが発生する場合があります。
1.1 SORT命令の処理内容
SORT命令の処理は、テーブルキーによって内部テーブルのレコードをソートします。
SORT命令は、キー項目であるNUMBER項目を優先してソートします。
キーは、内部テーブルの宣言時に指定しているものや、標準テーブルのキー項目を参照している項目が該当します。
また、次に解説するASCENDING / DESCENDINGオプションを利用しない場合は、デフォルトで昇順に並び替えされます。
1.2 ASCENDING / DESCENDINGオプション
ASCENDING / DESCENDINGオプションで並び替えの方法を昇順 or 降順で指定することができます。
・ASCENDING ⇒ 昇順(デフォルト)
・DESCENDING ⇒ 降順
SORT ITBA1 DESCENDING.
ASCENDINGオプションはデフォルトなので、指定する必要性はありませんが、ソースコードの可読性向上を目的として明示する場合があります。
(「SORT命令はデフォルトで昇順にする」と知っている人ばかりではありません。)
1.3 BYオプション
BYオプションで内部テーブルの項目を指定すると、テーブルキーではなく指定した項目に基づいて並び替えされます。
SORT ITBA1 BY PLACE ASCENDING.
一般的に、SORT命令を用いる場合、必ずBYオプションで項目を指定してあげるのが普通です。
どの項目をキーにソートしているのか、BYオプションを使えば一目でわかるためです。
あえて、項目を指定しない意味がないため、基本的には必ずソートする基準の項目を明示しておきましょう。
補足ですが、BYオプションでは項目を複数指定することができます。
SORT ITBA1 BY PLACE CAPITAL NUMBER ASCENDING.
1.4 昇順と降順の組み合わせ
実際にはあまり用いる場面はありませんが、昇順と降順を組み合わせることも可能です。
例えば、次の例では内部テーブルを「基本的には昇順で、CAPITALだけは降順で」並び替えを行います。
SORT ITBA1 ASCENDING BY CAPITAL DESCENDING.
タグ:ABAP