ABAP - Keyword Documentation →  ABAP - Reference →  Processing External Data →  ABAP Database Accesses →  Open SQL →  Open SQL - Read Accesses →  SELECT → 

SELECT - ORDER BY

Quick Reference

Syntax

... ORDER BY { {PRIMARY KEY}
             | { { col1|a1} [ASCENDING|DESCENDING],
                 {col2|a2} [ASCENDING|DESCENDING], ...}
             | (column_syntax) } ...

Alternatives:

1. ... ORDER BY PRIMARY KEY

2. ... ORDER BY {col1|a1} [ASCENDING|DESCENDING],
               {col2|a2} [ASCENDING|DESCENDING], ...

3. ... ORDER BY (column_syntax)

Effect

The addition ORDER BY sorts a multirow results set by the content of the specified column. The order of the rows in the results set is undefined with respect to all columns that are not specified after ORDER BY, and can be different in repeated executions of the same SELECT statement. If the addition ORDER BY is not specified, the order of all the columns in the results set is undefined.

The following restrictions apply when using the addition ORDER BY with other additions:

Notes

Alternative 1

... ORDER BY PRIMARY KEY


Effect

The results set is sorted in ascending order by the content of the primary key of a single data source. The following restrictions apply:

Note

If ORDER BY PRIMARY KEY is used with the addition FOR ALL ENTRIES in the WHERE condition, all fields of the primary key (except for the client column in client-specific tables) must be in theSELECT list.

Example

Reads the data from database table SFLIGHT for Lufthansa flight 0400, sorted by flight date.

DATA wa_sflight TYPE sflight.

SELECT *
       FROM sflight
       WHERE carrid = 'LH' AND
             connid = '0400'
       ORDER BY PRIMARY KEY
       INTO @wa_sflight.
  ...
ENDSELECT.

Alternative 2

... ORDER BY {col1|a1} [ASCENDING|DESCENDING],
             {col2|a2} [ASCENDING|DESCENDING], ...


Effect

For any columns specified in the SELECT list, a comma-separated list of columns can be specified after ORDER BY to be used as a sort criterion. Columns can be specified directly using the column names col1 col2 ..., or the alternative column names a1 a2 .... The latter is required if columns specified as aggregate expressions are to be used as sort criteria.

The additions ASCENDING and DESCENDING determine whether the column in question is sorted in ascending or descending order. If neither addition is specified, the column is sorted in ascending order. The priority of sorting is based on the order in which the components col1 col2... or a1 a2 ... are specified.

Pooled and cluster tables cannot be sorted by all types of column. Columns specified after ORDER BY cannot be of the type LCHR, LRAW, STRING, or RAWSTRING.

Notes

In other cases, SAP buffering is ignored.

Example

The rows of database table sflight are grouped by the columns carrid and connid, where for each group the minimum of column seatsocc is determined. The selection is sorted in ascending order by carrid and in descending order by the minimum of occupied seats. The alternative name min is used for the aggregate expression.

TYPES: BEGIN OF wa,
        carrid TYPE sflight-carrid,
        connid TYPE sflight-connid,
        min    TYPE i,
      END OF wa.

DATA itab TYPE TABLE OF wa WITH EMPTY KEY.

SELECT carrid, connid, MIN( seatsocc ) AS min
       FROM sflight
       GROUP BY carrid, connid
       ORDER BY carrid ASCENDING, min DESCENDING
       INTO CORRESPONDING FIELDS OF TABLE @itab.

cl_demo_output=>display_data( itab ).

Alternative 3

... ORDER BY (column_syntax)


Effect

As an alternative to specifying columns statically, a parenthesized data object column_syntax can be specified that contains the syntax of PRIMARY KEY or the list of columns when the statement is executed.

The same applies to column_syntax as when specifying the SELECT list dynamically. If the content of column_syntax is initial, the addition ORDER BY is ignored.

Security Note

If used wrongly, dynamic programming techniques can present a serious security risk. Any dynamic content that is passed to a program from the outside must be checked thoroughly or escaped before being used in dynamic statements. This can be done using the system class CL_ABAP_DYN_PRG or the predefined function escape. See SQL Injections Using Dynamic Tokens.

Notes

Comment characters placed within literals are, however, part of the literal.

Example

See Dynamic ORDER BY Clause.



Continue
SELECT, Dynamic ORDER-BY Clause