Condividi tramite


Clausola Forma COMPUTE

Una clausola SHAPE COMPUTE genera un oggetto Recordset padre, le cui colonne sono costituite da un riferimento all'oggetto Recordset figlio; colonne facoltative i cui contenuti sono sezioni, colonne nuove o calcolate, oppure il risultato dell'esecuzione di funzioni di aggregazione nell'oggetto Recordset figlio o in un Recordset precedentemente conformato; eventuali colonne dell'oggetto Recordset figlio elencate nella clausola BY facoltativa.

Sintassi

SHAPE child-command [AS] child-alias  
   COMPUTE child-alias [[AS] name], [appended-column-list]  
   [BY grp-field-list]  

Descrizione

Le parti di questa clausola sono le seguenti:

child-command
È costituito da uno dei seguenti elementi:

  • Un comando di query racchiuso tra parentesi graffe ("{}") che restituisce un oggetto Recordset figlio. Il comando viene eseguito al provider di dati sottostante e la relativa sintassi dipende dai requisiti di tale provider. In genere si tratta del linguaggio SQL, anche se ADO non richiede un linguaggio di query specifico.

  • Nome di un Recordset modellato esistente.

  • Un altro comando shape.

  • Parola chiave TABLE, seguita dal nome di una tabella nel provider di dati.

alias secondario
Alias utilizzato per fare riferimento all'oggetto Recordset restituito dal comando figlio.L'alias figlio è obbligatorio nell'elenco di colonne nella clausola COMPUTE e definisce la relazione tra gli oggetti Recordset padre e figlio.

appended-column-list
Elenco in cui ogni elemento definisce una colonna nell'elemento padre generato. Ogni elemento contiene una colonna del capitolo, una nuova colonna, una colonna calcolata o un valore risultante da una funzione di aggregazione nell'oggetto Recordset figlio.

grp-field-list
Elenco di colonne negli oggetti Recordset padre e figlio che specifica la modalità di raggruppamento delle righe nell'oggetto figlio.

Per ogni colonna nell'elenco grp-field-list, è presente una colonna corrispondente negli oggetti padre e figlio Recordset. Per ogni riga nell'oggetto Recordset padre, le colonne grp-field-list hanno valori univoci e l'oggetto Recordset figlio a cui fa riferimento la riga padre è costituito esclusivamente da righe figlio le cui colonne grp-field-list hanno gli stessi valori della riga padre.

Se la clausola BY è inclusa, le righe dell'oggetto Recordset figlio verranno raggruppate in base alle colonne nella clausola COMPUTE. Nel Recordset padre sarà presente una riga per ciascun gruppo di righe nel Recordset figlio.

Se la clausola BY viene omessa, l'intero oggetto Recordset figlio viene considerato come un singolo gruppo e l'oggetto Recordset padre conterrà esattamente una riga. Tale riga farà riferimento all'intero oggetto Recordset figlio. Omettendo la clausola BY, è possibile calcolare il "totale complessivo" di tutte le aggregazioni sull'intero recordset figlio.

Per esempio:

SHAPE {select * from Orders} AS orders             COMPUTE orders, SUM(orders.OrderAmount) as TotalSales         

Indipendentemente dal modo in cui viene formato l'oggetto Recordset padre (utilizzando COMPUTE o APPEND), conterrà una colonna di capitolo utilizzata per relazionarlo a un oggetto Recordset figlio. Se si desidera, l'oggetto Recordset padre può contenere anche colonne che contengono funzioni di aggregazione (SUM, MIN, MAX e così via) sulle righe figlie. Sia l'oggetto padre che l'oggetto Recordset figlio possono contenere colonne che contengono un'espressione nella riga dell'oggetto Recordset, nonché colonne nuove e inizialmente vuote.

Operazione

Il comando figlio viene emesso al provider, che restituisce un Recordset figlio.

La clausola COMPUTE specifica le colonne dell'oggetto Recordset padre, che può essere un riferimento all'oggetto Recordset figlio, a una o più aggregazioni, a un'espressione calcolata o a nuove colonne. Se è presente una clausola BY, le colonne definite vengono aggiunte anche all'oggetto Recordset padre. La clausola BY specifica come sono raggruppate le righe del Recordset figlio.

Si supponga, ad esempio, di avere una tabella denominata Dati demografici, costituita dai campi State, City e Population. Le cifre della popolazione nella tabella vengono fornite esclusivamente come esempio.

stato Città Popolazione
WA Seattle 700,000
O Medford 200,000
O Portland 400.000
CA Los Angeles 800,000
CA Napoli 600,000
WA Tacoma 500,000
O Corvallis 300.000

A questo punto, eseguire questo comando shape:

rst.Open  "SHAPE {select * from demographics} AS rs "  & _  
          "COMPUTE rs, SUM(rs.population) BY state", _  
           objConnection  

Questo comando apre un oggetto Recordset strutturato con due livelli. Il livello padre è un Recordset generato con una colonna di aggregazione (SUM(rs.population)), una colonna che fa riferimento al Recordset figlio (rs) e una colonna per il raggruppamento del Recordset figlio (state). Il livello figlio è l'oggetto Recordset restituito dal comando di query (select * from demographics).

Le righe di dettaglio dell'oggetto Recordset figlio verranno raggruppate in base allo stato, ma altrimenti senza un ordine particolare. Ovvero, i gruppi non saranno in ordine alfabetico o numerico. Se si desidera ordinare l'oggetto Recordset padre, è possibile utilizzare il metodo Sort dell'oggetto Recordset per ordinare l'oggetto Recordset padre.

È ora possibile spostarsi nell'oggetto Recordset padre aperto e accedere agli oggetti Recordset di dettagli figlio. Per ulteriori informazioni, vedere Accesso alle righe in un recordset gerarchico.

Recordset di dettagli padre e figlio risultanti

Genitore

SOMMA(rs.Popolazione) rs stato
1,300,000 Riferimento a bambino1 CA
1,200,000 Riferimento a child2 WA
1,100,000 Riferimento a child3 O

Child1

stato Città Popolazione
CA Los Angeles 800,000
CA Napoli 600,000

Figlio2

stato Città Popolazione
WA Seattle 700,000
WA Tacoma 500,000

Child3

stato Città Popolazione
O Medford 200,000
O Portland 400.000
O Corvallis 300.000

Vedere anche

Accesso alle righe in un recordset gerarchico
Panoramica della modellazione dei dati
oggetto Field
Grammatica formale delle forme
oggetto Recordset (ADO)
Fornitori richiesti per la modellazione dei dati
clausola APPEND della forma
Comandi di forma in generale
proprietà Value (ADO)
funzioni di Visual Basic per Applicazioni