Condividi tramite


Riepilogo dei dati con l'operatore ROLLUP

L'operatore ROLLUP risulta utile per generare report che includono subtotali e totali. Il set di risultati generato da questo operatore è simile ai set generati dall'operatore CUBE. Per ulteriori informazioni, vedere Riepilogo dei dati con l'operatore CUBE.

Le differenze tra gli operatori CUBE e ROLLUP sono le seguenti:

  • L'operatore CUBE genera un set di risultati in cui sono indicate le aggregazioni di tutte le combinazioni di valori delle colonne selezionate.
  • L'operatore ROLLUP genera un set di risultati in cui sono indicate le aggregazioni relative a una gerarchia di valori delle colonne selezionate.

Ad esempio, la tabella Inventory include i valori seguenti:

Item                 Color                Quantity                   
-------------------- -------------------- -------------------------- 
Table                Blue                 124                        
Table                Red                  223                        
Chair                Blue                 101                        
Chair                Red                  210                        

La query seguente genera un report contenente un subtotale:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
            ELSE ISNULL(Item, 'UNKNOWN')
       END AS Item,
       CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
            ELSE ISNULL(Color, 'UNKNOWN')
       END AS Color,
       SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

Item                 Color                QtySum                     
-------------------- -------------------- -------------------------- 
Chair                Blue                 101.00                     
Chair                Red                  210.00                     
Chair                ALL                  311.00                     
Table                Blue                 124.00                     
Table                Red                  223.00                     
Table                ALL                  347.00                     
ALL                  ALL                  658.00                     

(7 row(s) affected)

Se nella query si sostituisce la parola chiave ROLLUP con CUBE, il set di risultati CUBE è lo stesso, con l'unica differenza delle due righe aggiuntive finali seguenti:

ALL                  Blue                 225.00                     
ALL                  Red                  433.00                     

L'operazione CUBE ha generato righe per tutte le possibili combinazioni dei valori di Item e Color. In CUBE vengono riportate, ad esempio, non solo tutte le combinazioni possibili dei valori Color associati al valore Chair di Item (Red, Blue e Red + Blue), ma anche tutte le combinazioni possibili dei valori di Item associati al valore Red di Color (Chair, Table e Chair + Table).

Per ogni valore delle colonne a destra della clausola GROUP BY, l'operazione ROLLUP non genera tutte le combinazioni possibili dei valori della colonna o delle colonne a sinistra. Ad esempio, in ROLLUP non vengono riportate tutte le combinazioni possibili dei valori di Item per ogni valore Color.

Il set di risultati restituito da un'operazione ROLLUP presenta funzionalità simili a quelle del set restituito da COMPUTE BY. Offre tuttavia i vantaggi seguenti:

  • ROLLUP restituisce un solo set di risultati, mentre COMPUTE BY restituisce più set di risultati che comportano un aumento del grado di complessità del codice dell'applicazione.
  • A differenza di COMPUTE BY, ROLLUP è utilizzabile in un cursore del server.
  • Query Optimizer genera talvolta piani di esecuzione più efficienti quando si utilizza ROLLUP anziché COMPUTE BY.

Vedere anche

Concetti

Riepilogo dei dati con le clausole COMPUTE e COMPUTE BY

Altre risorse

SELECT (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005