Die ORDER-BY-Klausel sortiert die Zeilen der Selektion nach Spalteninhalten.
Ohne Verwendung der ORDER-BY-Klausel ist die Reihenfolge der Zeilen in der Selektion der SELECT-Klausel nicht festgelegt, sondern kann sich von Ausführung zu Ausführung der SELECT-Anweisung ändern. Die Selektion kann nach den Spalten des Primärschlüssels oder nach beliebigen Spalten sortiert werden. Die Spalten können statisch und dynamisch angegeben werden.
Um die Zeilen der Selektion aufsteigend nach dem Primärschlüssel der gelesenen Datenbanktabelle zu sortieren, schreibt man:
SELECT lines *
...
ORDER BY PRIMARY KEY.
Diese Form der Sortierung ist nur möglich, wenn in der SELECT-Klausel alle Spalten durch eine Stern (*) angegeben werden. Weiterhin sollten in der FROM-Klausel nur eine einzige Datenbanktabelle und keine Views oder Joins angegeben werden, da letztere keinen definierten Primärschlüssel haben.
Sie können die Zeilen der Selektion nach beliebigen Spalten zu sortieren, schreibt man:
SELECT...
...
ORDER BY s1[ASCENDING|DESCENDING]
s2
[ASCENDING|DESCENDING]...
Die Zeilen werden nach den Spalten s1, s2,... sortiert, wobei die Sortierreihenfolge für jede Spalte durch ASCENDING als aufsteigend oder DESCENDING als absteigend definiert werden kann. Die vorgegebene Sortierreihenfolge ist aufsteigend. Die Priorität der Sortierung richtet sich nach der Reihenfolge, in der die Spalten aufgeführt sind.
Die Spalten können durch die gleichen Feldbezeichner wie in der SELECT-Klausel oder deren Alternativnamen angegeben werden. Es können nur Spalten angegeben werden, die auch in der SELECT-Klausel vorkommen. Durch die Angabe der Alternativnamen von Aggregatausdrücken, kann auch nach solchen sortiert werden.
Um die Spalten der ORDER BY-Klausel dynamisch anzugeben, schreibt man:
SELECT...
...
ORDER BY (itab).
Dabei ist itab eine interne Tabelle mit dem Zeilentyp c und einer der maximalen Länge von 72 Zeichen, welche die Spaltennamen s1 s2 .... und die Zusätze zur Sortierreihenfolge enthält.
REPORT demo_select_order_by.
DATA: BEGIN OF wa,
carrid TYPE
sflight-carrid,
connid TYPE
sflight-connid,
min TYPE
i,
END OF wa.
SELECT carrid connid MAX( seatsocc ) AS min
INTO CORRESPONDING FIELDS OF wa
FROM sflight
GROUP BY carrid connid
ORDER BY carrid min DESCENDING.
WRITE: / wa-carrid, wa-connid, wa-min.
ENDSELECT.
Die Listenausgabe ist in etwa:
Die Zeilen der Datenbanktabelle SFLIGHT werden nach den Spalten CARRID und CONNID gruppiert, wobei für jede Gruppe das Minimum der Spalte SEATSOCC bestimmt wird. Die Selektion wird aufsteigend nach CARRID und absteigend nach diesem Minimum sortiert. Dabei wird der Alternativnamen min für den Aggregatausdruck verwendet.