SORT ( SAP ABAP Keyword)

SORT is a keyword used in SAP ABAP programming.This tutorial covers its introduction & syntax details.

SORT


Variants


1. SORT itab.
2. SORT.

Variant 1
SORT itab.

Additions


1. ... DESCENDING
2. ... ASCENDING
3. ... BY f1 f2 ... fi

Effect
Sorts the entries of the internal table itab in ascending order.

The default key is used as the sort key for internal tables.

Notes
The number of sort fields is restricted to 250.
The sorting process is not stable, i.e. if no sort is performed for a predefined sequence of fields, the sequence is not retained.
To delete all duplicate entries from a sorted internal table, you can specify DELETE ADJACENT DUPLICATES FROM itab after SORT .
The sort itself uses the Quicksort process where the key fields for all the data records are retrieved and placed in an area of main memory.
If there is not enough space in memory, the key fields are written to a temporary file and sorted by an external sort program. You can modify the directory which the SORT uses to store such auxiliary files by modifying the SAP profile parameter DIR_SORTTMP . Normally, auxiliary files are created in the SAP data directory (SAP profile parameter DIR_DATA ).

Addition 1
... DESCENDING

Effect
Sorts itab in descending order.

Addition 2
... ASCENDING

Effect
Sorts itab in ascending order (default).

Addition 3
... BY f1 f2 ... fi

Effect
Sorts itab by the sub-fields f1 , f2 , ..., fi which form the sort key. These fields can be any type (even number fields or tables). Unless you specify otherwise, the sort is in ascending order. You can also use additions 1 and 2 before BY if you want all sub-fields to apply. To change the sort sequence for each individual field, specify DESCENDING or ASCENDING after each of the sub-fields f1 , f2 , ..., fi .

Example

DATA: BEGIN OF PEOPLE OCCURS 5,
NAME(10),
AGE TYPE I,
NATIONALITY(3),
END OF PEOPLE.
PEOPLE-NAME = 'Sally'. PEOPLE-AGE = 22.
PEOPLE-NATIONALITY = 'USA'. APPEND PEOPLE.
PEOPLE-NAME = 'Peter'. PEOPLE-AGE = 25.
PEOPLE-NATIONALITY = 'FRG'. APPEND PEOPLE.
PEOPLE-NAME = 'Paula'. PEOPLE-AGE = 22.
PEOPLE-NATIONALITY = 'USA'. APPEND PEOPLE.
PEOPLE-NAME = 'Peter'. PEOPLE-AGE = 23.
PEOPLE-NATIONALITY = 'USA'. APPEND PEOPLE.
SORT PEOPLE.


The sequence of table entries now reads: 'Paula' , 'Peter' from 'FRG' , 'Peter' from 'USA' , 'Sally' .


SORT PEOPLE DESCENDING BY NATIONALITY AGE NAME.


The sequence now reads: 'Peter' from 'USA' , 'Sally' , 'Paula' , 'Peter' from 'FRG' .


SORT PEOPLE DESCENDING BY AGE ASCENDING NAME.


The sequence now reads: 'Sally' , 'Paula' , 'Peter' from 'USA' , 'Peter' from 'FRG' .

Notes
If a sort criterion is not known until runtime, you can use SORT itab BY ... (name) ... to specify it dynamically as the contents of the field name . If name is blank at runtime, the sort criterion is ignored. If name contains an invalid component name, a runtime error occurs.
You can use offset and length specifications to further restrict sort criteria, regardless of whether they are specified statically or dynamically.
If itab is an internal table with a header line, you can also use a field symbol pointing to the header line of itab as a dynamic sort criterion. If the field symbol does not point to the header line of the internal table, a runtime error occurs.

Note
Performance
The runtime required to sort an internal table increases with the number of entries and the width of the sort key.

Sorting an internal table with 100 entries and the 50-byte wide default key would take about 1300 msn (standardized microseconds). A 30-byte wide sort key would need about 950 msn.
If one of the specified sort criteria is itself an internal table, the SORT may sometimes take longer.
Runtime errors

SORT_ITAB_FIELD_INVALID :A field symbol used as a dynamic sort criterion does not point to the header line of the internal table to be sorted.


SORT_TOO_MANY_FIELDS : More than 250 sort criteria.

Related APPEND ... SORTED BY

Variant 2
SORT.

Additions


1. ... DESCENDING (similar to variant 1)
2. ... ASCENDING (similar to variant 1)
3. ... BY f1 f2 ... fi
4. ... BY fg

Effect
Sorts the dataset generated with EXTRACT by the fields in the field group HEADER (see FIELD-GROUPS ).
Here, blank fields (i.e. fields not defined with EXTRACT ) are inserted before all non-blank fields, regardless of whether the sort sequence is in ascending or descending order.

Notes
The number of sort criteria is restricted to 50.
As with variant 1, any sequence of fields you specify for sorting purposes does not remain fixed. Any sequence of records which belongs to different field groups, but has the same HEADER field contents, is arbitrary.
Again like variant 1, sorting takes place in main memory if at all possible. If there is insufficient space there, ABAP/4 calls an external sort program. You can modify the directory used to create the temporary auxiliary file by modifying the SAP profile parameter DIR_SORTTMP .
As soon as a dataset has been processed with SORT or LOOP ... ENDLOOP , you cannot extract any more records with EXTRACT .

Addition 3
... BY f1 f2 ... fi

Effect
Can sort only by fields in the field group HEADER .
Otherwise, the effect is similar to variant 1.

Addition 4
... BY fg

Effect
Sorts by the fields in field group fg .
However, the only fields which can be sorted are those in the field group HEADER , i.e. the field group fg can consist only of fields from the field group HEADER (see INSERT ... INTO ).

Example

DATA: ONR(7), DATE TYPE D, POSITION(3) TYPE N,
CUSTOMER(16),
PNR(5) TYPE N, NAME(10), UNITS TYPE I,
ORDERS TYPE I.
FIELD-GROUPS: HEADER, ORDER, PRODUCT, DATE_FIRST.
INSERT ONR DATE POSITION INTO HEADER.
INSERT CUSTOMER INTO ORDER.
INSERT PNR NAME UNITS INTO PRODUCT.
INSERT DATE ONR POSITION INTO DATE_FIRST.
ONR = 'GF00012'. DATE = '19921224'.
POSITION = '000'. CUSTOMER = 'Good friend (2.)'.
EXTRACT ORDER.
ADD 1 TO POSITION.
PNR = '12345'. NAME = 'Screw'. UNITS = 100.
EXTRACT PRODUCT.
ADD 1 TO POSITION.
PNR = '23456'. NAME = 'Nail'. UNITS = 200.
EXTRACT PRODUCT.
ONR = 'MM00034'. DATE = '19920401'.
POSITION = '000'. CUSTOMER = 'Moneymaker'.
EXTRACT ORDER.
ADD 1 TO POSITION.
PNR = '23456'. NAME = 'Nail'. UNITS = 300.
EXTRACT PRODUCT.
ADD 1 TO POSITION.
PNR = '34567'. NAME = 'Hammer'. UNITS = 4.
EXTRACT PRODUCT.
ONR = 'GF00011'. DATE = '19921224'.
POSITION = '000'. CUSTOMER = 'Good friend (1.)'.
EXTRACT ORDER.
ADD 1 TO POSITION.
PNR = '34567'. NAME = 'Hammer'. UNITS = 5.
EXTRACT PRODUCT.
SORT BY DATE_FIRST.
LOOP.
AT ORDER.
WRITE: /, / DATE, ONR, POSITION,
CUSTOMER, 'ordered:'.
ENDAT.
AT PRODUCT.
WRITE: / DATE, ONR, POSITION,
PNR, NAME, UNITS.
ENDAT.
ENDLOOP.


This generates the following output:

01041992 MM00034 000 Moneymaker ordered:
01041992 MM00034 001 23456 Nail 300
01041992 MM00034 002 34567 Hammer 4

24121992 GF00011 000 Good friend (1.) ordered:
24121992 GF00011 001 34567 Hammer 5

24121992 GF00012 000 Good friend (2.) ordered:
24121992 GF00012 001 12345 Screw 100
24121992 GF00012 002 23456 Nail 200

Note
Performance

The runtime required to sort an internal table increases with the number of entries and the width of the sort key.

Note
Runtime errors

SORT_EXTRACT_TOO_MANY_FIELDS : More than 50 sort criteria


SORT_FIELD_NOT_IN_HEADER : Sort criterion not in field group HEADER


SORT_NO_HEADER : Field group HEADER not created


SORT_WITHIN_LOOP : SORT on extract dataset within LOOP on extract dataset

Most readed SAP Tutorials

Latest Added SAP documents

Custom Search
ABAP Tutorials ABAP Syntax BAPI SAP Jobs SAP Glossary SAP Netweaver SAP XI SAP Download SAP Interview questions

Complete SAP Study materials | SAP JOBS | PDF Tutorials   List of SAP Companies India

Google-Translate-Chinese (Simplified) BETA Google-Translate-English to French Google-Translate-English to German Google-Translate-English to Italian Google-Translate-English to Japanese BETA Google-Translate-English to Korean BETA Google-Translate-English to Russian BETA Google-Translate-English to Spanish

All of the product names here are trademarks of their respective companies. The site sapbrainsonline.com no way affiliated with SAP AG. Use information on this site at your own risk. Information furnished in the site is collected from various sites and posts from users. This site does not host any files on its server. If any compliants about the posts please contact us at sapbrain.support@gmail.com

Sitemap
web counter