COMPUTE (Transact-SQL)
Gera totais que são exibidos como colunas de resumo adicionais no fim do conjunto de resultados. Quando usado com BY, a cláusula COMPUTE gera quebras de controle e subtotais no conjunto de resultados. Você pode especificar COMPUTE BY e COMPUTE na mesma consulta.
Importante |
---|
Esse recurso será removido na próxima versão do Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam. Use ROLLUP em vez disso. Para obter mais informações, consulte GROUP BY (Transact-SQL). |
Sintaxe
[ 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 a agregação a ser executada. Essas funções de agregação de linha são usadas com a cláusula COMPUTE.Função de agregação de linha
Resultado
AVG
Média dos valores na expressão numérica
COUNT
Número de linhas selecionadas
MAX
Valor mais alto na expressão
MIN
Valor mais baixo na expressão
STDEV
Desvio padrão estatístico para todos os valores da expressão
STDEVP
Desvio padrão estatístico para a população de todos os valores da expressão
SUM
Total dos valores na expressão numérica
VAR
Variação estatística para todos os valores da expressão
VARP
Variação estatística para a população de todos os valores da expressão
Não há nenhum equivalente a COUNT (*). Para localizar as informações de resumo produzidas por GROUP BY e COUNT (*), use uma cláusula COMPUTE sem BY.
Essas funções ignoram valores nulos.
A palavra-chave DISTINCT não é permitida com funções de agregação de linha quando elas são especificadas com a cláusula COMPUTE.
Ao adicionar ou calcular a média de dados inteiros, o Mecanismo de banco de dados do SQL Server trata o resultado como um valor int, mesmo que o tipo de dados da coluna seja smallint ou tinyint. Para obter mais informações sobre os tipos de retorno de dados adicionados ou de média de dados, consulte SUM (Transact-SQL) e AVG (Transact-SQL).
Observação Para reduzir a chance de erros de estouro nos programas ODBC e DB-Library, faça todas as declarações de variáveis para os resultados das medias ou somas do tipo de dados int.
expression
Uma Expressões (Transact-SQL), como o nome de uma coluna na qual o cálculo é realizado. A expression deve ser exibida na lista de seleção e deve ser especificada exatamente como uma das expressões da lista. Um alias de coluna especificado na lista de seleção não pode ser usado dentro da expression.Observação Os tipos de dados ntext, text ou image não podem ser especificados em uma cláusula COMPUTE ou COMPUTE BY.
BY expression
Gera quebras de controle e subtotais no conjunto de resultados. expression é uma cópia idêntica de uma order_by_expression na cláusula ORDER BY associada. Normalmente, é um nome de coluna ou alias de coluna. Várias expressões podem ser especificadas. A listagem de várias expressões depois de BY quebra um grupo em subgrupos e aplica a função de agregação a cada nível do agrupamento.Se você usar COMPUTE BY, também deverá usar uma cláusula ORDER BY. As expressões devem ser iguais ou ser um subconjunto daquelas listadas depois de ORDER BY e devem estar na mesma sequência. Por exemplo, se a cláusula ORDER BY for ORDER BY a, b, c,a cláusula COMPUTE poderá ser qualquer uma das seguintes ou todas:
COMPUTE BY a, b, c COMPUTE BY a, b COMPUTE BY a
Observação Em uma declaração SELECT com uma cláusula COMPUTE, a ordem das colunas na lista de seleção substitui a ordem das funções de agregação na cláusula COMPUTE. Os programadores de ODBC e DB-Library devem conhecer esse requisito de ordem para colocar os resultados da função de agregação no lugar correto.
Não é possível usar COMPUTE em uma instrução SELECT INTO porque as instruções que incluem COMPUTE geram tabelas, e seus resultados de resumo não são armazenados no banco de dados. Portanto, qualquer cálculo produzido por COMPUTE não é exibido na nova tabela criada com a instrução SELECT INTO.
Você não pode usar a cláusula COMPUTE quando a instrução SELECT fizer parte de uma instrução DECLARE CURSOR.
Exemplos
A. Usando COMPUTE em consulta para retornar totais
No exemplo a seguir, a instrução SELECT usa uma cláusula COMPUTE simples para produzir um total da soma de SubTotal e TotalDue da tabela SalesOrderHeader.
USE AdventureWorks2008R2;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue);
B. Usando COMPUTE em consulta para retornar totais
No exemplo a seguir, a instrução SELECT usa uma cláusula COMPUTE para produzir totais por vendedor da soma de SubTotal e TotalDue da tabela SalesOrderHeader.
USE AdventureWorks2008R2;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;