Share via


Synthèse de données à l'aide de COMPUTE et COMPUTE BY

Les clauses COMPUTE et COMPUTE BY sont fournies pour la compatibilité ascendante. En remplacement, utilisez les composants suivants :

Une clause COMPUTE BY vous permet d'afficher à la fois les lignes de détails et les lignes de statistiques à l'aide d'une seule instruction SELECT. Vous pouvez calculer des valeurs de synthèse pour des sous-groupes ou une seule valeur de statistiques pour l'ensemble du jeu de résultats.

La clause COMPUTE prend les informations suivantes :

  • Mot clé BY facultatif. Il calcule l'agrégat de lignes spécifié par colonne.
  • Un nom de fonction d'agrégat de lignes. Ceci peut être SUM, AVG, MIN, MAX ou COUNT.
  • Une colonne dans laquelle exécuter la fonction d'agrégat de lignes.

Jeux de résultats générés par COMPUTE

Les valeurs de synthèse générées par COMPUTE apparaissent comme un jeu de résultats séparé des résultats de la requête. Les résultats d'une requête qui contient une clause COMPUTE sont comparables à un rapport de contrôle d'interruption. Il s'agit d'un rapport dont les valeurs de synthèse sont contrôlées par les groupements, ou interruptions, que vous spécifiez. Vous pouvez calculer des valeurs statistiques pour des groupes et appliquer plusieurs fonctions d'agrégat à un même groupe.

Lorsque vous spécifiez COMPUTE avec la clause facultative BY, chaque groupe qualifié pour l'instruction SELECT reçoit deux jeux de résultats :

  • Le premier jeu de résultats de chaque groupe comprend l'ensemble des lignes de détails contenant les informations de la liste de sélection de ce groupe.
  • Le second jeu de résultats de chaque groupe comprend une ligne contenant les sous-totaux des fonctions d'agrégat spécifiées dans la clause COMPUTE de ce groupe.

Lorsque vous spécifiez COMPUTE sans la clause facultative BY, il y a deux jeux de résultats pour l'instruction SELECT :

  • Le premier de chaque groupe comprend toutes les lignes de détails contenant les informations de la liste de sélection.
  • Le second comprend une ligne contenant les totaux des fonctions d'agrégat spécifiées dans la clause COMPUTE.

Exemples utilisant COMPUTE

L'instruction SELECT suivante utilise une clause COMPUTE simple afin de produire le grand total des prix unitaires et des remises de la table SalesOrderDetail :

USE AdventureWorks
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount)

La requête suivante ajoute le mot clé facultatif BY à la clause COMPUTE afin de produire des sous-totaux pour chaque commande :

USE AdventureWorks
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount) BY SalesOrderID

Les résultats de cette instruction SELECT retournent deux jeux de résultats pour chaque commande. Le premier jeu de résultats de chaque commande comprend un ensemble de lignes contenant les informations spécifiées dans la liste de sélection. Le second jeu de chaque commande comprend les sous-totaux des deux fonctions SUM de la clause COMPUTE.

ms190452.note(fr-fr,SQL.90).gifRemarque :
Certains utilitaires, tels que osql, affichent plusieurs synthèses d'agrégat total ou sous-total comme si chaque sous-total était une ligne distincte d'un jeu de résultats. Ceci est dû au formatage du résultat par l'utilitaire. Les agrégats totaux ou sous-totaux sont retournés chacun sur une ligne. D'autres applications, telles que SQL Server Management Studio, formatent plusieurs agrégats dans une même ligne.

Comparaison de COMPUTE et GROUP BY

La liste suivante résume les différences entre COMPUTE et GROUP BY :

  • GROUP BY produit un seul jeu de résultats. Il y a une ligne pour chaque groupe ne contenant que les colonnes de regroupement et les fonctions d'agrégat qui illustrent le sous-agrégat de ce groupe. La liste de sélection ne peut contenir que les colonnes de regroupement et les fonctions d'agrégat.
  • COMPUTE produit plusieurs jeux de résultats. Un type de jeu de résultats comprend les lignes de détails de chaque groupe contenant les expressions de la liste de sélection. L'autre type comprend le sous-agrégat d'un groupe ou l'agrégat total de l'instruction SELECT. La liste de sélection peut contenir des expressions différentes des colonnes de regroupement ou des fonctions d'agrégat. Ces fonctions d'agrégat sont spécifiées dans la clause COMPUTE et non dans la liste de sélection.

La requête suivante utilise la clause GROUP BY et des fonctions d'agrégat : Cette requête retourne un jeu de résultats avec une ligne par groupe contenant les sous-totaux d'agrégat de ce groupe :

USE AdventureWorks
SELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ms190452.note(fr-fr,SQL.90).gifRemarque :
Les clauses COMPUTE et COMPUTE BY ne peuvent pas contenir de données de type ntext, text ou image.

Voir aussi

Concepts

Principes de base des requêtes

Autres ressources

SELECT (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005