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.

Nota importanteImportante

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

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 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;