Synthèse de données à l'aide de ROLLUP
L'opérateur ROLLUP est utile pour générer des rapports qui contiennent des sous-totaux et des totaux. Il génère un ensemble de résultats similaire à ceux générés par l'opérateur CUBE. Pour plus d'informations, consultez Synthèse de données à l'aide de CUBE.
Les différences entre les opérateurs CUBE et ROLLUP sont les suivantes :
- CUBE génère un ensemble de résultats montrant les agrégats pour toutes les combinaisons de valeurs dans les colonnes sélectionnées.
- ROLLUP génère un ensemble de résultats montrant les agrégats pour une hiérarchie de valeurs dans les colonnes sélectionnées.
Par exemple, une table Inventory simple contient :
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
Cette requête génère un rapport de sous-total :
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)
Si vous remplacez le mot clé ROLLUP
par CUBE
dans la requête, l'ensemble de résultats CUBE
est identique, à l'exception des deux lignes suivantes qui sont retournées à la fin :
ALL Blue 225.00
ALL Red 433.00
L'opération CUBE
génère des lignes pour toutes les combinaisons possibles des valeurs de Item
et Color
. Par exemple, non seulement l'opération CUBE
rapporte toutes les combinaisons possibles des valeurs Color
combinées avec la valeur Item``Chair
(Red
, Blue
et Red
+ Blue
), mais elle rapporte également toutes les combinaisons possibles des valeurs Item
combinées avec la valeur Color``Red
(Chair
, Table
et Chair
+ Table
).
Pour chaque valeur dans les colonnes de droite dans la clause GROUP BY
, l'opération ROLLUP
ne rapporte pas toutes les combinaisons possibles des valeurs dans la ou les colonne(s) de gauche. Par exemple, ROLLUP
ne rapporte pas toutes les combinaisons possibles des valeurs Item
pour chaque valeur Color
.
La fonctionnalité de l'ensemble de résultats d'une opération ROLLUP est similaire à celle d'un ensemble retourné par COMPUTE BY ; toutefois, ROLLUP comporte les avantages suivants :
- ROLLUP retourne un seul ensemble de résultats tandis que COMPUTE BY en retourne plusieurs, ce qui augmente la complexité du code de l'application.
- Contrairement à COMPUTE BY, ROLLUP peut être utilisé dans un curseur de serveur.
- L'optimiseur de requête peut parfois générer des programmes d'exécution plus efficaces pour ROLLUP que pour COMPUTE BY.
Voir aussi
Concepts
Synthèse de données à l'aide de COMPUTE et COMPUTE BY