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

Autres ressources

SELECT (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005