COMPUTE (Transact-SQL)

Génère des totaux qui s'affichent sous la forme de colonnes de résumé supplémentaires à la fin de l'ensemble de résultats. Lorsqu'elle est utilisée avec BY, la clause COMPUTE génère des ruptures et des sous-totaux de contrôle dans l'ensemble de résultats. Vous pouvez utiliser COMPUTE BY et COMPUTE dans une même requête.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe


[ COMPUTE 
    { { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM } 
    ( expression ) } [ ,...n ] 
    [ BY expression [ ,...n ] ] 
]

Arguments

AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM

Indique la fonction d'agrégation à utiliser. Les fonctions d'agrégation de lignes suivantes sont utilisées avec la clause COMPUTE :

Fonction d'agrégation de lignes Résultat

AVG

Moyenne des valeurs dans l'expression numérique

COUNT

Nombre de lignes sélectionnées

MAX

Valeur la plus élevée de l'expression

MIN

Valeur la plus faible de l'expression

STDEV

Écart type statistique pour toutes les valeurs de l'expression

STDEVP

Écart type statistique du remplissage pour toutes les valeurs de l'expression

SUM

Total des valeurs de l'expression numérique

VAR

Variance statistique de toutes les valeurs de l'expression

VARP

Variance statistique du remplissage pour toutes les valeurs de l'expression

Il n'y a pas d'équivalent à la fonction COUNT(*). Pour obtenir les données résumées produites par GROUP BY et COUNT(*), utilisez la clause COMPUTE sans BY.

Ces fonctions ignorent les valeurs NULL.

Le mot clé DISTINCT n'est pas autorisé avec les fonctions d'agrégation de lignes lorsqu'elles sont spécifiées avec la clause COMPUTE.

Lorsque vous calculez la somme ou la moyenne de données de type entier, Microsoft Moteur de base de données SQL Server 2005 traite le résultat comme une valeur de type int, même si la colonne est de type smallint ou tinyint. Pour plus d'informations sur les types de valeurs renvoyés par la somme ou la moyenne des données, consultez SUM (Transact-SQL) et AVG (Transact-SQL).

ms181708.note(fr-fr,SQL.90).gifRemarque :
Pour réduire les possibilités d'erreurs de dépassement dans les programmes ODBC et de bibliothèque de bases de données, attribuez le type int à toutes les déclarations de variables utilisées dans le calcul des moyennes ou des sommes.

expression

Une Expressions (Transact-SQL), telle que le nom d'une colonne sur laquelle est effectué le calcul. L'argument expression doit apparaître dans la liste de sélection et être spécifiée comme étant identique à l'une des expressions de la liste de sélection. Un alias de colonne spécifié dans la liste de sélection ne peut pas être utilisé à l'intérieur de expression.

ms181708.note(fr-fr,SQL.90).gifRemarque :
Les types de données ntext, text ou image ne peuvent pas être spécifiés dans une clause COMPUTE ou COMPUTE BY.

BY expression

Génère des ruptures et des sous-totaux de contrôle dans l'ensemble de résultats. expression est une copie exacte de order_by_expression dans la clause ORDER BY associée. Généralement, il s'agit d'un nom de colonne ou d'un alias de colonne. Il est possible de spécifier plusieurs expressions. Le fait d'indiquer plusieurs expressions après BY permet de scinder un groupe en sous-groupes et d'appliquer la fonction d'agrégation à chaque niveau de regroupement.

Si vous utilisez COMPUTE BY, vous devez également utiliser une clause ORDER BY. Les expressions doivent être identiques ou être un sous-ensemble de celles qui figurent après ORDER BY ; elles doivent également se trouver dans la même séquence. Par exemple, si la clause ORDER BY est ORDER BY a, b, c, la clause COMPUTE peut avoir une ou l'ensemble des formes suivantes :

COMPUTE BY a, b, c
COMPUTE BY a, b
COMPUTE BY a
ms181708.note(fr-fr,SQL.90).gifRemarque :
Dans une instruction SELECT comprenant une clause COMPUTE, l'ordre des colonnes de la liste de sélection remplace l'ordre des fonctions d'agrégation de la clause COMPUTE. Les programmeurs ODBC et de bibliothèque de base de données doivent respecter cet ordre afin de pouvoir placer à l'emplacement approprié les résultats des fonctions d'agrégation.

Vous ne pouvez pas utiliser la clause COMPUTE dans une instruction SELECT INTO dans la mesure où les instructions incluant COMPUTE génèrent des tables et leurs résultats résumés ne sont pas enregistrés dans la base de données. Pour cette raison, tous les calculs effectués par COMPUTE ne s'affichent pas dans la nouvelle table créée à l'aide de l'instruction SELECT INTO.

Vous ne pouvez pas utiliser la clause COMPUTE lorsque l'instruction SELECT fait partie d'une instruction DECLARE CURSOR.

Exemples

A. Utilisation de COMPUTE dans une requête pour le calcul de totaux

Dans l'exemple suivant, l'instruction SELECT utilise une clause COMPUTE simple afin de produire le total général des sommes de SubTotal et de TotalDue de la table SalesOrderHeader.

USE AdventureWorks;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue);

B. Utilisation de COMPUTE dans une requête pour le calcul de totaux

Dans l'exemple suivant, l'instruction SELECT utilise une clause COMPUTE afin de produire les totaux par commerciaux (salesperson) des sommes de SubTotal et de TotalDue de la table SalesOrderHeader.

USE AdventureWorks;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;

Voir aussi

Référence

SELECT (Transact-SQL)
Clause ORDER BY (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005