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.
Importante |
---|
Questa caratteristica verrà rimossa a partire dalla prossima versione di Microsoft SQL Server. Non utilizzare questa caratteristica in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata. Utilizzare in alternativa ROLLUP. Per ulteriori informazioni, vedere GROUP BY (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 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. Se, ad esempio, la clausola ORDER BY è ORDER BY a, b, c,la clausola COMPUTE può essere una delle seguenti:
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;