Clausola COMPUTE di Shape

Una clausola COMPUTE di Shape genera un oggetto Recordset padre, le cui colonne sono costituite da un riferimento all'oggetto Recordset figlio, da colonne facoltative i cui contenuti sono colonne a capitoli, nuove o calcolate oppure il risultato dell'esecuzione di funzioni di aggregazione nell'oggetto Recordset figlio o in un oggetto Recordset con forma precedente e da 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 dagli elementi seguenti:

  • Comando di query all'interno di parentesi graffe ("{}") che restituisce un oggetto Recordset figlio. Il comando viene inviato al provider di dati sottostante e la sua sintassi dipende dai requisiti di tale provider. Si tratta in genere del linguaggio SQL, anche se ADO non richiede alcun linguaggio di query specifico.

  • Nome di un oggetto Recordset sagomato esistente.

  • Un altro comando shape.

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

child-alias
Alias usato per fare riferimento all'oggetto Recordset restituito da child-command. child-alias è obbligatorio nell'elenco di colonne della 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 a capitoli, una colonna nuova, 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'elemento figlio.

Per ogni colonna di grp-field-list è presente una colonna corrispondente negli oggetti Recordset figlio e padre. Per ogni riga dell'oggetto Recordset padre, le colonne di 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 di 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 della clausola COMPUTE. L'oggetto Recordset padre conterrà una riga per ogni gruppo di righe dell'oggetto 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. L'omissione della clausola BY consente di calcolare le aggregazioni "totali" per l'intero oggetto Recordset figlio.

Ad esempio:

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

Indipendentemente dal modo in cui viene formato (con COMPUTE o APPEND), l'oggetto Recordset padre conterrà una colonna a capitoli usata per correlarlo a un oggetto Recordset figlio. Se si vuole, l'oggetto Recordset padre può includere anche colonne che contengono aggregazioni (SUM, MIN, MAX e così via) sulle righe figlio. Sia l'oggetto Recordset padre che quello figlio possono contenere colonne che contengono un'espressione nella riga dell'oggetto Recordset, nonché colonne nuove e inizialmente vuote.

Operazione

child-command viene emesso al provider, che restituisce un oggetto Recordset figlio.

La clausola COMPUTE specifica le colonne dell'oggetto Recordset padre, che possono essere un riferimento all'oggetto Recordset figlio, una o più aggregazioni, un'espressione calcolata o nuove colonne. Se è presente una clausola BY, le colonne definite vengono aggiunte anche all'oggetto Recordset padre. La clausola BY specifica la modalità di raggruppamento delle righe dell'oggetto Recordset figlio.

Si supponga, ad esempio, di avere una tabella denominata Demographics, costituita dai campi State, City e Population. I dati sulla popolazione nella tabella sono forniti solo come esempio.

Provincia Città Popolazione
WA Seattle 700,000
OPPURE Medford 200.000
OPPURE Portland 400.000
CA Los Angeles 800,000
CA San Diego 600,000
WA Tacoma 500,000
OPPURE Corvallis 300.000

Eseguire ora 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 con forma con due livelli. Il livello padre è un oggetto Recordset generato con una colonna aggregata (SUM(rs.population)), una colonna che fa riferimento all'oggetto Recordset figlio (rs) e una colonna per il raggruppamento dell'oggetto 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 senza un ordine specifico. Ovvero, i gruppi non saranno in ordine alfabetico o numerico. Se si vuole ordinare l'oggetto Recordset padre, è possibile usare il metodo Recordset Sort per ordinare l'oggetto Recordset padre.

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

Recordset padre e figlio di dettaglio risultanti

Parent

SUM (rs.Population) rs Provincia
1,300,000 Riferimento a child1 CA
1,200,000 Riferimento a child2 WA
1,100,000 Riferimento a child3 OPPURE

Child1

Provincia Città Popolazione
CA Los Angeles 800,000
CA San Diego 600,000

Child2

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

Child3

Provincia Città Popolazione
OPPURE Medford 200.000
OPPURE Portland 400.000
OPPURE Corvallis 300.000

Vedi anche

Accesso alle righe in un recordset gerarchico
Panoramica del data shaping
Oggetto Field
Grammatica formale per Shape
Oggetto Recordset (ADO)
Provider necessari per il data shaping
Clausola APPEND per Shape
Comandi Shape in generale
Proprietà Value (ADO)
Funzioni di Visual Basic, Applications Edition