COMPUTE (Transact-SQL)

Genera totales que aparecen como columnas de resumen adicionales al final del conjunto de resultados. Cuando se utiliza con BY, la cláusula COMPUTE genera interrupciones de control y subtotales en el conjunto de resultados. Puede especificar COMPUTE BY y COMPUTE en la misma consulta.

Nota importanteImportante

Esta característica se quitará en la versión siguiente de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. En su lugar, utilice ROLLUP. Para obtener más información, vea GROUP BY (Transact-SQL).

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis


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

Argumentos

  • AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
    Especifica la función de agregado que se va a realizar. Estas funciones de agregado de filas se utilizan con la cláusula COMPUTE.

    Función de agregado de filas

    Resultado

    AVG

    Promedio de los valores de la expresión numérica.

    COUNT

    Número de filas seleccionadas.

    MAX

    Valor mayor de la expresión.

    MIN

    Valor menor de la expresión.

    STDEV

    Desviación estándar estadística de todos los valores de la expresión.

    STDEVP

    Desviación estándar estadística de la población para todos los valores de la expresión.

    SUM

    Total de los valores de la expresión numérica.

    VAR

    Varianza estadística de todos los valores de la expresión.

    VARP

    Varianza estadística de la población de todos los valores de la expresión.

    No existe ninguna función equivalente a COUNT(*). Para localizar la información de resumen que producen GROUP BY y COUNT(*), utilice una cláusula COMPUTE sin BY.

    Estas funciones omiten los valores NULL.

    No se permite utilizar la palabra clave DISTINCT en funciones de agregado de filas cuando se especifican con la cláusula COMPUTE.

    Cuando agrega o calcula el promedio de datos enteros, el SQL Server Database Engine (Motor de base de datos de SQL Server) trata el resultado como un valor de tipo int, incluso si el tipo de datos de la columna es smallint o tinyint. Para obtener más información acerca de los tipos devueltos por los datos agregados o de promedio, vea SUM (Transact-SQL) y AVG (Transact-SQL).

    Nota

    Para reducir la posibilidad de que se produzcan errores de desbordamiento en programas de ODBC y de DB-Library, cree todas las declaraciones de variables de los resultados de los promedios o sumas con el tipo de datos int.

  • expression
    Una Expresiones (Transact-SQL), por ejemplo, el nombre de una columna en la que se realiza el cálculo. expression debe aparecer en la lista de selección y se debe especificar exactamente igual que una de las expresiones de la lista de selección. En expression no se puede utilizar un alias de columna especificado en la lista de selección.

    Nota

    No se pueden especificar los tipos de datos ntext, text ni image en una cláusula COMPUTE o COMPUTE BY.

  • BY expression
    Genera interrupciones de control y subtotales en el conjunto de resultados. expression es una copia exacta de order_by_expression de la cláusula ORDER BY asociada. Normalmente se trata de un nombre de columna o de un alias de columna. Se pueden especificar varias expresiones. Si se enumeran varias expresiones después de BY, se divide un grupo en subgrupos y se aplica la función de agregado en cada nivel del agrupamiento.

    Si utiliza COMPUTE BY, también deberá utilizar una cláusula ORDER BY. Las expresiones deben ser idénticas a ORDER BY o un subconjunto de las enumeradas después de ORDER BY, y deben estar en la misma secuencia. Por ejemplo, si la cláusula ORDER BY es ORDER BY a, b, c,la cláusula COMPUTE puede ser cualquiera, o todas, de las siguientes:

    COMPUTE BY a, b, c
    COMPUTE BY a, b
    COMPUTE BY a
    

    Nota

    En una instrucción SELECT que contenga una cláusula COMPUTE, el orden de las columnas de la lista de selección reemplaza el orden de las funciones de agregado de la cláusula COMPUTE. Los programadores de ODBC y DB-Library deben conocer este requisito del orden para colocar los resultados de las funciones de agregado en la ubicación correcta.

No puede utilizar COMPUTE en una instrucción SELECT INTO debido a que las instrucciones que contienen COMPUTE generan tablas y los resultados del resumen no se almacenan en la base de datos. Por lo tanto, los cálculos que produce COMPUTE no aparecen en la nueva tabla creada con la instrucción SELECT INTO.

No puede utilizar la cláusula COMPUTE si la instrucción SELECT forma parte de una instrucción DECLARE CURSOR.

Ejemplos

A. Usar COMPUTE en la consulta para devolver totales

En el siguiente ejemplo, la instrucción SELECT utiliza una cláusula COMPUTE sencilla para producir un total general de la suma de SubTotal y TotalDue de la tabla SalesOrderHeader.

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

B. Usar COMPUTE en la consulta para devolver totales

En el siguiente ejemplo, la instrucción SELECT utiliza una cláusula COMPUTE sencilla para producir totales por vendedor de la suma de SubTotal y TotalDue de la tabla SalesOrderHeader.

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