Condividi tramite


Clausola ORDER IN GROUP

La clausola ORDER IN GROUP viene utilizzata insieme all'istruzione GROUP ON, che restituisce i set di risultati nei gruppi. La clausola ORDER IN GROUP consente di ordinare ogni gruppo restituito in modo diverso. Se si raggruppa in System.Kind, ad esempio, è possibile ordinare tutti i documenti in base a System.Document.LastAuthor, tutti i file musicali di System.Music.AlbumArtist e tutti i messaggi di posta elettronica di System.Message.FromName.

Sintassi

Di seguito è riportata la sintassi della clausola ORDER IN GROUP:

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>]] ])

L'identificatore del nome del gruppo è un intervallo o un valore noto della colonna di gruppo, come specificato nell'istruzione GROUP ON. Ad esempio, i valori noti per System.Photo.ISOSpeed includono 'ISO-100', 'ISO-200' e così via. Un intervallo per System.Photo.DateTaken includerebbe '2006-1-1' e '2007-1-1' per un'istruzione come GROUP ON System.ItemDate ['2006-1-1', '2007-1-1'].

L'identificatore di colonna deve essere una colonna valida specificata nell'istruzione GROUP ON o SELECT. È possibile includere più colonne, separate da virgole. Ad esempio, se si raggruppa su System.Photo.ISOSpeed, è possibile ordinare tutte le foto ISO-100, prima per System.Photo.ShutterSpeed e quindi per System.Photo.Aperture.

L'identificatore di direzione facoltativo può essere asc per l'asc crescente (da basso a alto) o DESC per decrescente (da alto a basso). Se non si specifica un identificatore di direzione, viene utilizzata l'impostazione predefinita crescente. Se si specificano più colonne, ma non si specificano tutte le direzioni, la direzione specificata per ultima viene applicata a ogni colonna successiva fino a quando non si modifica in modo esplicito la direzione.

Gli intervalli o i valori non specificati in modo esplicito in una clausola ORDER GROUP IN vengono ordinati in ordine crescente in base ai valori nella colonna GROUP ON.

Esempi

L'esempio seguente raggruppa i risultati in base alla proprietà System.Kind. La query ordina il gruppo 'program' in base al nome dell'applicazione e al gruppo 'music' in base al titolo dell'album e al numero di traccia. Il gruppo di NULL viene ordinato in base al nome dell'elemento. Tutti gli altri gruppi sarebbero ordinati in base alla data dell'elemento.

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)

L'esempio seguente raggruppa i risultati in base alla proprietà System.ItemDate e quindi ordina ogni gruppo in base all'URL dell'elemento, al tipo o al nome.

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)

I risultati della query precedente vengono restituiti in cinque gruppi e ordinati come descritto nella tabella seguente.

Gruppo Descrizione Filtrate
MINVALUE Elementi con date precedenti al 2006-1-1 Ordinato in base all'URL dell'elemento, in ordine crescente
2006-1-1 Elementi con date successive o successive al 2006-1-1 ma prima del 2007-1-1 Ordinato in base alla data dell'elemento, in ordine crescente
2007-1-1 Elementi con date in data o dopo il 2007-1-1 ma prima del 2008-1-1 Ordinamento in base al valore di tipo, in ordine crescente
2008-1-1 Elementi con date successive al 2008-1-1 Ordinato in base alla data dell'elemento, in ordine crescente
NULL Elementi senza valore nella colonna System.ItemDate Ordinato in base al nome dell'elemento, in ordine crescente

 

riferimento

GROUP ON ... SOPRA... Istruzione

clausola ORDER BY