Show TOC Anfang des Inhaltsbereichs

Sortierreihenfolge angeben  Dokument im Navigationsbaum lokalisieren

Die ORDER-BY-Klausel sortiert die Zeilen der Selektion nach Spalteninhalten.

Diese Grafik wird im zugehörigen Text erklärt

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.

Nach Primärschlüssel sortieren

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.

Nach beliebigen Spalten sortieren

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.

Dynamische Angabe der Spalten

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.

Beispiel

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:

Diese Grafik wird im zugehörigen Text erklärt

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.

 

 

Ende des Inhaltsbereichs