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 di nome gruppo è un intervallo o un valore noto della colonna del 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 include '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'ordine 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 viene applicata per 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.

Esempio

Nell'esempio seguente i risultati sono raggruppati in base alla proprietà System.Kind. La query ordina il gruppo "programma" in base al nome dell'applicazione e al gruppo "music" in base al titolo e al numero di traccia dell'album. Il gruppo NULL verrà ordinato in base al nome dell'elemento. Tutti gli altri gruppi vengono 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 Ordinamento
MINVALUE Elementi con date precedenti al 2006-1-1 Ordinamento 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 Ordinamento in base alla data dell'elemento, in ordine crescente
2007-1-1 Elementi con date successive o successive al 2007-1-1 ma prima del 2008-1-1 Ordinato in base al valore di tipo, in ordine crescente
2008-1-1 Elementi con date successive al 2008-1-1 Ordinamento 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 ... OLTRE... Affermazione

Clausola ORDER BY