ORDER IN GROUP-Klausel

Die ORDER IN GROUP-Klausel wird in Verbindung mit der GROUP ON-Anweisung verwendet, die Resultsets in Gruppen zurückgibt. Mit der ORDER IN GROUP-Klausel können Sie jede zurückgegebene Gruppe auf eine andere Weise sortieren. Wenn Sie beispielsweise nach System.Kind gruppieren, können Sie dann alle Dokumente nach System.Document.LastAuthor, alle Musikdateien nach System.Music.AlbumArtist und alle E-Mails nach System.Message.FromName sortieren.

Syntax

Es folgt die Syntax der ORDER IN GROUP-Klausel:

GROUP ON <group column and optional ranges>
OVER (SELECT ... FROM SystemIndex
    ORDER 
        IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]]
        [IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]] ]
        [BY <column> [<direction>] [,<column> [<direction>]] ])

Der Gruppennamenspezifizierer ist ein Bereich oder ein bekannter Wert aus der Gruppenspalte, wie in der GROUP ON-Anweisung angegeben. Bekannte Werte für System.Photo.ISOSpeed wären beispielsweise "ISO-100", "ISO-200" usw. Ein Bereich für System.Photo.DateTaken enthält "2006-1-1" und "2007-1-1" für eine Anweisung wie GROUP ON System.ItemDate ['2006-1-1', '2007-1-1'].

Der Spaltenbezeichner muss eine gültige Spalte sein, die entweder in der GROUP ON- oder der SELECT-Anweisung angegeben ist. Sie können mehrere Spalten einschließen, die durch Kommas getrennt sind. Wenn Sie beispielsweise nach System.Photo.ISOSpeed gruppieren, können Sie alle ISO-100-Fotos sortieren, zuerst nach System.Photo.ShutterSpeed und dann nach System.Photo.Aperture.

Der optionale Richtungsspezifizierer kann entweder ASC für aufsteigend (niedrig bis hoch) oder DESC für absteigend (hoch bis niedrig) sein. Wenn Sie keinen Richtungsspezifizierer angeben, wird der Standard (aufsteigend) verwendet. Wenn Sie mehr als eine Spalte angeben, aber nicht alle Richtungen angeben, wird die zuletzt angegebene Richtung auf jede aufeinanderfolgende Spalte angewendet, bis Sie die Richtung explizit ändern.

Bereiche oder Werte, die nicht explizit in einer ORDER GROUP IN-Klausel angegeben sind, werden in aufsteigender Reihenfolge nach den Werten in der GROUP ON-Spalte sortiert.

Beispiele

Im folgenden Beispiel werden die Ergebnisse nach der System.Kind-Eigenschaft gruppiert. Die Abfrage würde die Gruppe "programm" nach dem Anwendungsnamen und der Gruppe "Musik" nach Albumtitel und Titelnummer sortieren. Die NULL-Gruppe wird nach dem Elementnamen sortiert. Alle anderen Gruppen würden nach dem Elementdatum sortiert.

GROUP ON System.Kind 
OVER (SELECT System.ItemUrl, System.Music.AlbumTitle, System.Music.TrackNumber, System.ItemName, System.ItemDate, System.Kind FROM SystemIndex
    ORDER 
        IN GROUP 'program' BY System.ApplicationName ASC
        IN GROUP 'music' BY System.Music.AlbumTitle ASC, System.Music.TrackNumber ASC
        IN GROUP NULL BY System.ItemName
        BY System.ItemDate DESC)

Im folgenden Beispiel werden die Ergebnisse nach der System.ItemDate-Eigenschaft gruppiert und dann jede Gruppe nach Element-URL, Art oder Name sortiert.

GROUP ON System.ItemDate ['2006-1-1', '2007-1-1', '2008-1-1'] 
OVER (SELECT System.ItemUrl, System.ItemName, System.ItemDate System.Kind FROM SystemIndex
    ORDER 
        IN GROUP MINVALUE BY System.ItemUrl ASC
        IN GROUP '2007-1-1' BY System.Kind
        IN GROUP NULL BY System.ItemName)

Die Ergebnisse der vorherigen Abfrage werden in fünf Gruppen zurückgegeben und wie in der folgenden Tabelle beschrieben sortiert.

Gruppieren Beschreibung Sortiert nach:
MINVALUE Elemente mit Datumsangaben vor dem 1.1.2006 Sortiert nach der URL des Elements in aufsteigender Reihenfolge
2006-1-1 Elemente mit Datumsangaben am oder nach dem 1.1.2006, aber vor dem 1.1.2007 Sortiert nach Elementdatum in aufsteigender Reihenfolge
2007-1-1 Elemente mit Datumsangaben am oder nach dem 1.1.2007, aber vor dem 1.1.2008 Sortiert nach Artwert in aufsteigender Reihenfolge
2008-1-1 Elemente mit Datumsangaben am oder nach dem 1.1.2008 Sortiert nach Elementdatum in aufsteigender Reihenfolge
NULL Elemente ohne Wert in der Spalte System.ItemDate Sortiert nach Elementname in aufsteigender Reihenfolge

 

Referenz

GRUPPIERUNG AUF ... ÜBER... Anweisung

ORDER BY-Klausel