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.
Convenciones 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)