Compartir a través de


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.

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 2005 Database Engine (Motor de base de datos de SQL Server 2005) de Microsoft 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 sólo puede ser cualquiera, todas o 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 AdventureWorks;
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 AdventureWorks;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;

Vea también

Referencia

SELECT (Transact-SQL)
ORDER BY (cláusula de Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005