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 <s 1 >, <s 2 >,... 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 <s 1 > <s 2 >.... 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