Share via


Riepilogo dei dati con le clausole COMPUTE e COMPUTE BY

Le clausole COMPUTE e COMPUTE BY sono supportate per garantire la compatibilità con le versioni precedenti. È tuttavia consigliabile utilizzare i componenti seguenti:

La clausola COMPUTE BY consente di visualizzare le righe di dettaglio e di riepilogo con una sola istruzione SELECT. È possibile calcolare i valori di riepilogo dei sottogruppi o un valore di riepilogo per l'intero set di risultati.

La clausola COMPUTE accetta le seguenti informazioni:

  • La parola chiave facoltativa BY, che calcola l'aggregazione a livello di riga specificata per ciascuna colonna.
  • Un nome della funzione di aggregazione a livello di riga, ad esempio SUM, AVG, MIN, MAX, or COUNT.
  • La colonna su cui eseguire la funzione di aggregazione a livello di riga.

Set di risultati generati dalla clausola COMPUTE

I valori di riepilogo generati dalla clausola COMPUTE vengono visualizzati come set di risultati distinti all'interno dei risultati della query. I risultati di una query che include una clausola COMPUTE sono simili a un report con suddivisioni personalizzate, ovvero un report in cui i valori di riepilogo sono basati sui raggruppamenti (o suddivisioni) specificati. È possibile produrre valori di riepilogo per i gruppi, nonché calcolare più funzioni di aggregazione per lo stesso gruppo.

Quando la clausola COMPUTE viene specificata insieme alla clausola facoltativa BY, si ottengono due set di risultati per ciascun gruppo che soddisfa i criteri dell'istruzione SELECT:

  • Il primo set di risultati include il set di righe di dettaglio contenenti le informazioni dell'elenco di selezione relative al gruppo stesso.
  • Il secondo set di risultati include una sola riga contenente i subtotali delle funzioni di aggregazione specificate nella clausola COMPUTE per il gruppo stesso.

Se la clausola COMPUTE viene specificata senza la clausola facoltativa BY, l'istruzione SELECT restituisce due set di risultati:

  • Il primo set di risultati per ogni gruppo include tutte le righe di dettaglio contenenti le informazioni dell'elenco di selezione.
  • Il secondo set di risultati include una sola riga contenente i totali delle funzioni di aggregazione specificate nella clausola COMPUTE.

Esempi di utilizzo della clausola COMPUTE

Nell'istruzione SELECT viene utilizzata una clausola COMPUTE semplice per ottenere il totale generale dei prezzi unitari e degli sconti della tabella SalesOrderDetail:

USE AdventureWorksSELECT SalesOrderID, UnitPrice, UnitPriceDiscountFROM Sales.SalesOrderDetailORDER BY SalesOrderIDCOMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount)

La query seguente aggiunge la parola chiave facoltativa BY alla clausola COMPUTE per ottenere i subtotali relativi a ciascun ordine di vendita:

USE AdventureWorksSELECT SalesOrderID, UnitPrice, UnitPriceDiscountFROM Sales.SalesOrderDetailORDER BY SalesOrderIDCOMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount) BY SalesOrderID

I risultati di questa istruzione SELECT includono due set di risultati per ciascun ordine di vendita. Il primo set di risultati include un set di righe contenenti le informazioni specificate nell'elenco di selezione. Il secondo set di risultati per ogni gruppo include invece i subtotali delle due funzioni SUM della clausola COMPUTE.

[!NOTA] In alcune utilità, ad esempio osql, è possibile visualizzare più riepiloghi di aggregazione di subtotali o totali in modo che ciascun subtotale costituisca una riga distinta del set di risultati. Questo comportamento è dovuto alla modalità di formattazione dell'output adottata dall'utilità, in quanto le aggregazioni dei subtotali o totali vengono restituite in una sola riga. Questo tipo di formattazione viene applicato anche in altre applicazioni, ad esempio SQL Server Management Studio.

Confronto tra COMPUTE e GROUP BY

Di seguito sono riepilogate le differenze tra COMPUTE e GROUP BY:

  • GROUP BY produce un unico set di risultati con una riga per ogni gruppo contenente le colonne di raggruppamento e le funzioni di aggregazione che indicano l'aggregazione secondaria relativa a tale gruppo. L'elenco di selezione può includere solo le colonne di raggruppamento e le funzioni di aggregazione.
  • COMPUTE produce più set di risultati. Un tipo di set di risultati include le righe dei dettagli per ogni ciascun contenente le espressioni dell'elenco di selezione. L'altro tipo di set di risultati include l'aggregazione secondaria per un gruppo o l'aggregazione del totale per l'istruzione SELECT. Oltre alle colonne di raggruppamento e alle funzioni di aggregazione, l'elenco di selezione può includere altre espressioni. Le funzioni di aggregazione vengono specificate nella clausola COMPUTE, non nell'elenco di selezione.

La query seguente utilizza la clausola GROUP BY e le funzioni di aggregazione. Restituisce un unico set di risultati che include una riga per ogni gruppo contenente le aggregazioni dei subtotali relativi a tale gruppo:

USE AdventureWorksSELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount)FROM Sales.SalesOrderDetailGROUP BY SalesOrderID

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

Vedere anche

Concetti

Nozioni fondamentali sulle query

Altre risorse

SELECT (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005