GROUP ON ... OLTRE... Affermazione

IL GRUPPO SU... OLTRE... L'istruzione restituisce un set di righe gerarchico in cui i risultati della ricerca vengono divisi in gruppi in base a una colonna specificata e a intervalli di raggruppamento facoltativi. Se si esegue il raggruppamento nella colonna System.Kind , il set di risultati viene suddiviso in più gruppi: uno per i documenti, uno per le comunicazioni e così via. Se si raggruppa in System.Size e nell'intervallo di gruppo 100 KB, il set di risultati viene diviso in tre gruppi: elementi di dimensioni pari a 100 KB, elementi di dimensioni <>= 100 KB e elementi senza valore di dimensione. È anche possibile aggregare i raggruppamenti con le funzioni.

In questo argomento vengono illustrati gli argomenti seguenti:

Sintassi

IL GRUPPO SU ... OLTRE... L'istruzione ha la sintassi seguente:

GROUP ON <column> ['['<group ranges>']']] 
[AGGREGATE <aggregate_function>] 
[ORDER BY <column> [<direction>]] | [ORDER IN GROUP '<group name>' BY <column> [<direction>]]
    OVER (GROUP ON... | SELECT... ] )

dove gli intervalli di raggruppamento sono definiti come segue:

<group ranges> := <range limit> [/'<label>'] | <range limit> [/'<label>'], <group ranges>
<range limit> := (<number> | <date> | '<string>' | BEFORE('<string>') | AFTER('<string>')) 

La colonna> GROUP ON <può essere un identificatore normale o delimitato per una proprietà nell'archivio delle proprietà.

L'intervallo> di gruppi facoltativo <è un elenco di uno o più valori (numero, data o stringa) usati per dividere i risultati in gruppi. Il <limite> di intervallo identifica un punto di divisione nel set di risultati restituito e

Il primo gruppo di risultati include gli elementi con il valore minimo possibile per la proprietà specificata fino a ma non include il limite del primo intervallo. Questo gruppo può essere indicato con la parola chiave MINVALUE. Il secondo gruppo può essere indicato con l'identificatore di limite di intervallo stesso e include elementi il cui valore per la proprietà specificata è uguale o maggiore del limite di intervallo. Tutti gli elementi che non hanno un valore per la proprietà specificata vengono restituiti per ultimo e possono essere indicati con la parola chiave NULL .

Ad esempio, un limite di intervallo di '2006-01-01' per la proprietà System.DateCreated divide il set di risultati in elementi con date precedenti al 2006-01-01 (gruppo MINVALUE), gli elementi con date su o dopo il 2006-01-01 (gruppo 2006-01-01) e gli elementi senza data (gruppo NULL ).

All'interno di ogni gruppo, i risultati vengono ordinati in base ai valori nella colonna GROUP ON per impostazione predefinita. La clausola ORDER BY facoltativa può contenere un identificatore di direzione di ASC per l'ordine crescente (da basso a alto) o DESC per decrescente (da alto a basso) e la clausola ORDER IN GROUP BY può ordinare ogni gruppo usando regole diverse. Per altre informazioni, vedere la sezione Gruppi di ordinamento più avanti.

Intervalli di gruppi

La tabella seguente illustra come i risultati vengono divisi in gruppi in base ai limiti dell'intervallo:

Esempio (<colonna> [intervalli di gruppi]) Risultato
System.Size [1000, 5000] I risultati vengono raggruppati in quattro bucket: MINVALUE: Dimensioni < 1000
1000: 1000 <= Dimensioni < 5000
5000: Dimensioni >= 5000
NULL: Nessun valore per Size
System.Author [BEFORE('m'),AFTER('r')] I risultati vengono raggruppati in quattro bucket: MINVALUE: Autore < carattere prima di "m"
m: carattere prima di "m" <= Autore < carattere dopo "r"
r: character after "r" <= Author
NULL: Nessun valore per Author
System.Author [MINVALUE/'a a l',"m"/'m to z'] I risultati vengono raggruppati in tre bucket: a l: Author < "m"
da m a z: "m" <= Autore
NULL: Nessun valore per Author
System.DateCreated ['2005-1-01','2006-6-01'] I risultati vengono raggruppati in quattro bucket:
MINVALUE: DataCreata < 2005-1-01
2005-1-01: 2005-1-01 <= DataCreata < 2006-6-01
2006-1-01: DateCreated >= 2006-6-01
NULL: Nessun valore per DateCreated

 

 

Importante

Errato: GROUP ON System.Author['m','z','a']

Corretta: GROUP ON System.Author['a','m','z']

 

 

Gruppi di etichettatura

Per migliorare la leggibilità, è possibile etichettare i gruppi usando la sintassi seguente:

GROUP ON <column> [<range limit>/'<label>',<range limit>/'<label>']

L'etichetta è separata dal limite di intervallo con una barra e racchiusa tra virgolette singole. Se non si specifica un'etichetta, il nome del gruppo è la stringa di limite di intervallo.

Di seguito è riportato un esempio di gruppi di etichettatura:

GROUP ON System.Size [(MINVALUE/'Small','100')/'Medium','50000'/'Large']
    OVER (SELECT System.Size FROM SystemIndex)

In Windows 7 o versione successiva è anche possibile usare un'etichetta [OTHER] generica per combinare più intervalli di raggruppamento. I risultati di tutti i gruppi identificati con questa etichetta verranno combinati in un unico gruppo con questa etichetta. Questo gruppo di risultati viene restituito dopo tutti gli altri gruppi, ad eccezione del gruppo NULL . Il gruppo NULL contiene i risultati per gli elementi che non hanno un valore per la proprietà specificata. Prima di Windows 7 l'etichetta [OTHER] viene considerata come qualsiasi altra etichetta di gruppo.

Il codice seguente è un esempio di uso dell'etichetta [OTHER] per i gruppi che verrebbero creati in Windows 7 o versione successiva:

GROUP ON System.Author ['0', 'A'/'[OTHER]', 'I', 'Q', 'W'/'[OTHER]', 'Y']
    OVER (SELECT System.DateCreated FROM SystemIndex)

La tabella seguente illustra i gruppi che verrebbero creati dal codice di raggruppamento precedente in Windows 7 o versione successiva.

Gruppo System.Author System.FileName
0 1Bill Lorem.docx
Q Regina Ipsum.docx
Robin dolor.docx
S Zara amet.docx
[ALTRO] Abner nonummy.docx
Bob laoreet.docx
Xaria magna.docx
NULL aliquam.docx

 

Gruppi di ordinamento

Esistono tre modi per ordinare gli elementi nei gruppi:

  • Ordinamento predefinito: se non si specifica diversamente, i risultati vengono ordinati in base ai valori nella colonna GROUP ON, in ordine crescente.
  • ORDER BY: è possibile specificare l'ordine decrescente in una clausola ORDER BY. È necessario ordinare i risultati in base alla colonna GROUP ON.
  • ORDER IN GROUP BY: è possibile specificare un ordine diverso per ogni gruppo. Se si raggruppa su System.Kind, è possibile ordinare i documenti in base a System.Author e musica di System.Music.Artist.

Per altre informazioni sui risultati dell'ordinamento, vedere le pagine di riferimento della clausola ORDER BY e ORDER IN GROUP.

Gruppi di annidamento

È possibile annidare gruppi con più clausole GROUP ON. L'ordine specificato nella query viene riflesso direttamente nella gerarchia del gruppo di output, come illustrato nell'esempio seguente.

GROUP ON <System.Kind> 
      OVER (GROUP ON <System.Author> 
                  OVER (SELECT <System.DateCreated>))
System.Kind System.Author System.DateCreated
documenti Willa 2006-01-02
2006-01-05
Zara 2007-06-02
2007-09-10
(DIP) interno Abner 2006-04-16
Jean 2007-02-20
Willa 2006-10-15
Zara 2008-01-02

 

 

Raggruppamento in proprietà vettoriali

Raggruppando le proprietà del vettore, le proprietà che possono contenere uno o più valori contemporaneamente, confrontano i valori del vettore singolarmente per impostazione predefinita. Ad esempio, se è presente un documento, Lorem.docx, con la proprietà System.Author come "Theresa; Zara" e un altro documento, Ipsum.docx, con la proprietà System.Author come "Zara", la query restituisce il set di risultati in due gruppi, come illustrato di seguito:

GROUP ON <System.Author> 
      OVER (SELECT <System.FileName>)
System.Author System.FileName
Theresa Lorem.docx
Zara Lorem.docx
  Ipsum.docx

 

Come si può notare, il raggruppamento sulle proprietà vettoriali restituisce righe duplicate. Lorem.docx viene visualizzato due volte perché ha due autori.

 

Altri esempi

GROUP ON System.Photo.ISOSpeed [0,10,100] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.DateCreated['2005/01/01 00:00:00', '2005/12/30 23:00:00'] 
      OVER (SELECT System.ItemName, System.Size, System.ItemUrl FROM SystemIndex)
            
GROUP ON System.Author ORDER BY System.Author DESC 
      OVER (GROUP ON System.DateCreated ORDER BY System.DateCreated ASC 
                  OVER (SELECT System.FileName, System.DateCreated, System.Size FROM SystemIndex 
                        WHERE CONTAINS(*, 'text')))

GROUP ON System.ItemName [before('a'), 'a', before ('c'), 'd', after('d')] 
      OVER (SELECT System.ItemName, System.ItemUrl FROM SystemIndex ORDER BY System.ItemName)                        
                        
GROUP ON System.ItemNameDisplay ['a' / 'col_a','c' / 'col_c'] 
      OVER (SELECT System.ItemNameDisplay FROM SystemIndex 
            ORDER BY System.ItemNameDisplay)

GROUP ON System.Size[1,2] 
      OVER (GROUP ON System.Author['a','f','mc','x'] 
                  OVER (GROUP ON System.DateCreated['2005/07/25 07:00:00', '2005/08/25 07:00:00']
                        ORDER BY System.DateCreated DESC 
                              OVER (SELECT System.FileName FROM SystemIndex 
                                    WHERE CONTAINS('text'))))   

Funzioni di aggregazione

Clausola ORDER BY

Clausola ORDER IN GROUP