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.

Important

Cette fonctionnalité sera supprimée dans la prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt ROLLUP. Pour plus d'informations, consultez GROUP BY (Transact-SQL).

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, le Moteur de base de données SQL Server 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).

    [!REMARQUE]

    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.

    [!REMARQUE]

    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
    

    [!REMARQUE]

    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;