Condividi tramite


COMPUTE (Transact-SQL)

Genera totali, i quali vengono visualizzati come colonne di riepilogo aggiuntive al termine del set di risultati. Quando viene utilizzata con la parola chiave BY, la clausola COMPUTE genera suddivisioni personalizzate e subtotali nel set di risultati. È possibile specificare la clausola COMPUTE BY e la clausola COMPUTE nella stessa query.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi


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

Argomenti

AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM

Specifica la funzione di aggregazione da eseguire. Le seguenti funzioni di aggregazione a livello di riga vengono utilizzate con la clausola COMPUTE.

Funzione di aggregazione a livello di di riga Risultato

AVG

Media dei valori dell'espressione numerica

COUNT

Numero di righe selezionate

MAX

Valore massimo dell'espressione

MIN

Valore minimo dell'espressione

STDEV

Deviazione statistica standard su tutti i valori dell'espressione

STDEVP

Deviazione statistica standard della popolazione su tutti i valori dell'espressione

SUM

Totale dei valori dell'espressione numerica

VAR

Varianza statistica su tutti i valori dell'espressione

VARP

Varianza statistica della popolazione su tutti i valori dell'espressione

Non esiste un equivalente della funzione COUNT(*). Per trovare le informazioni di riepilogo prodotte dalla clausola GROUP BY e dalla funzione COUNT(*), utilizzare una clausola COMPUTE senza BY.

Con le funzioni seguenti i valori Null vengono ignorati.

La parola chiave DISTINCT non è supportata con funzioni di aggregazione a livello di riga quando sono specificate nella clausola COMPUTE.

Quando viene calcolata la somma o la media di dati integer, in Motore di database di SQL Server 2005 di Microsoft il risultato viene considerato un valore di tipo int, anche se il tipo di dati della colonna è smallint o tinyint. Per ulteriori informazioni sui tipi restituiti dei dati su cui è stata calcolata la somma o la media, vedere SUM (Transact-SQL) e AVG (Transact-SQL).

[!NOTA] Assegnare il tipo di dati int a tutte le dichiarazioni di variabili per i risultati di operazioni AVERAGE o SUM, in modo da ridurre il rischio di errori di overflow in programmi ODBC e DB-Library.

expression

L'argomento Espressioni (Transact-SQL) specifica un'espressione, ad esempio il nome di una colonna in cui viene eseguito il calcolo. L'argomento expression deve essere incluso nell'elenco di selezione ed essere specificato esattamente come una delle espressioni di tale elenco. Un alias di colonna dell'elenco di selezione non può essere utilizzato nell'argomento expression.

[!NOTA] Non è possibile specificare i tipi di dati ntext, text o image in una clausola COMPUTE o COMPUTE BY.

BY expression

Genera suddivisioni personalizzate e subtotali nel set di risultati. expression è la copia esatta di un argomento order_by_expression della clausola ORDER BY. In genere è un nome o un alias di colonna. È possibile specificare più espressioni. Se BY è seguito da più espressioni, un gruppo viene suddiviso in sottogruppi e la funzione di aggregazione viene applicata a ogni livello di raggruppamento.

Se si specifica la clausola COMPUTE BY, è necessario specificare anche la clausola ORDER BY. Le espressioni devono essere identiche a quelle elencate dopo ORDER BY, o a un subset di tali espressioni, e ordinate nella stessa sequenza. For example, if the ORDER BY clause is ORDER BY a, b, c, the COMPUTE clause can be any, or all, of the following:

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

[!NOTA] In un'istruzione SELECT con una clausola COMPUTE, l'ordine delle colonne nell'elenco di selezione è prioritario rispetto all'ordine delle funzioni di aggregazione nella clausola COMPUTE. È necessario che i programmatori di ODBC e DB-Library conoscano tale requisito di ordinamento in modo che la funzione di aggregazione venga inserita correttamente.

Non è possibile utilizzare la clausola COMPUTE in un'istruzione SELECT INTO perché le istruzioni che includono COMPUTE generano tabelle i cui risultati di riepilogo non vengono archiviati nel database. I calcoli ottenuti con la clausola COMPUTE, pertanto, non verrebbero visualizzati nella nuova tabella creata con l'istruzione SELECT INTO.

Non è possibile utilizzare la clausola COMPUTE quando l'istruzione SELECT fa parte di un'istruzione DECLARE CURSOR.

Esempi

A. Utilizzo della clausola COMPUTE nella query per la restituzione di totali

Nell'esempio seguente l'istruzione SELECT utilizza una clausola COMPUTE semplice per produrre il totale generale della somma dei valori di SubTotal e TotalDue nella tabella SalesOrderHeader.

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

B. Utilizzo della clausola COMPUTE nella query per la restituzione di totali

Nell'esempio seguente l'istruzione SELECT utilizza una clausola COMPUTE per produrre i totali per venditore della somma dei valori di SubTotal e TotalDue nella tabella SalesOrderHeader.

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

Vedere anche

Riferimento

SELECT (Transact-SQL)
Clausola ORDER BY (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005