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