内部テーブルを昇順・降順での並び替えを行うSORT命令について解説します。
SORT命令は単純な並び替えを行うだけのように理解してしまいがちですが、実は結構奥が深い(ソートの優先順や、昇順・降順の混合など)命令です。
このページで学べる内容
- SORT命令の意味と使い方
- ASCENDING / DESCENDINGオプションの使い方
- BYオプションの使い方
- 昇順と降順の組み合わせ
ABAPerであれば、絶対に知っておきたい内容ばかりですので是非最後までご覧ください。
SORT命令:構文ルール
SORT(内部テーブル).
構文は非常に簡単です。オペランド部に並び替えを行いたい内部テーブルを指定するだけです。(ただし、オプションなしのこのままの形で利用することはあまりありません。理由は後述します。)
指定する内部テーブルは、標準テーブルかハッシュテーブルでなければなりません。つまりソートテーブルをソートすることはできません。ソートテーブルを指定してしまう場合、プログラム実行時にショートダンプが発生する場合があります。
※ハッシュテーブルやソートテーブルという言葉にピンとこない方は以下の記事をご覧ください。
SORT命令の処理内容
SORT命令の処理は、テーブルキーによって内部テーブルのレコードをソートします。
SORT ITBA1.
と記述した結果は以下の通りです。
ご覧のように、レコードが並び変えられました。
SORT命令は、キー項目であるNUMBER項目を優先してソートします。キーは、内部テーブルの宣言時に指定しているものや、標準テーブルのキー項目を参照している項目が該当します。
また、次に解説するASCENDING / DESCENDINGオプションを利用しない場合は、デフォルトで昇順に並び替えされます。
ASCENDING / DESCENDINGオプション
ASCENDING / DESCENDINGオプションで並び替えの方法を昇順 or 降順で指定することができます。
- ASCENDING ⇒ 昇順(デフォルト)
- DESCENDING ⇒ 降順
SORT ITBA1 DESCENDING.
と記述した結果がこちらです。
NUMBERをキーに降順に並び替えされます。
ASCENDINGオプションはデフォルトなので、指定する必要性はありませんが、ソースコードの可読性向上を目的として明示する場合があります。(「SORT命令はデフォルトで昇順にする」と知っている人ばかりではありません。)
BYオプション
BYオプションで内部テーブルの項目を指定すると、テーブルキーではなく指定した項目に基づいて並び替えされます。
SORT ITBA1 BY PLACE ASCENDING.
項目「PLACE」に基づいて昇順に並び替えされます。
この例では、アルファベットの昇順で並び替えされます。一般的に、SORT命令を用いる場合、必ずBYオプションで項目を指定してあげるのが普通です。どの項目をキーにソートしているのか、BYオプションを使えば一目でわかるためです。
あえて、項目を指定しない意味がないため、基本的には必ずソートする基準の項目を明示しておきましょう。
補足ですが、BYオプションでは項目を複数指定することができます。
次のコードは「PLACE」「CAPITAL」「NUMBER」の順に昇順で並び替えを行う例です。
SORT ITBA1 BY PLACE CAPITAL NUMBER ASCENDING.
昇順と降順の組み合わせ
実際にはあまり用いる場面はありませんが、昇順と降順を組み合わせることも可能です。例えば、次の例では内部テーブルを「基本的には昇順で、CAPITALだけは降順で」並び替えを行います。
SORT ITBA1 ASCENDING BY CAPITAL DESCENDING.
実行結果
繰り返しになりますが、内部テーブルの並び替えをここまで複雑に行う場面はあまり見かけません。
ABAPを勉強中の方は・・・
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!