Cláusula de cálculo de forma
Aplica-se ao: Access 2013, Office 2013
Uma cláusula COMPUTE de forma gera um Recordset pai, cujas colunas consistem em uma referência ao Recordset filho; colunas opcionais cujo conteúdo são colunas de capítulo, colunas novas ou colunas calculadas, ou o resultado da execução de funções agregadas no Recordset filho ou em um Recordset com formato anterior; e todas as colunas do Recordset filho listado na cláusula BY opcional.
Sintaxe
SHAPE child-command [AS] child-alias
COMPUTE child-alias [[AS] name], [appended-column-list]
[BY grp-field-list]
Descrição
As partes dessa cláusula são as seguintes:
child-command
Consiste em um dos itens a seguir:
Um comando de consulta entre chaves ("{}") que retorna um objeto Recordset filho. O comando é emitido para o provedor de dados subjacente, e sua sintaxe depende dos requisitos desse provedor. Em geral, será usada a linguagem SQL, embora o ADO não exija nenhuma linguagem de consulta específica.
O nome de um Recordset com formato existente.
Um outro comando shape.
A palavra-chave TABLE, seguida do nome de uma tabela no provedor de dados.
child-alias
- Um alias usado para se referir ao Recordset retornado por child-command. O child-alias é necessário na lista de colunas na cláusula COMPUTE e define a relação entre os objetos Recordset pai e filho.
appended-column-list
- Uma lista na qual cada elemento define uma coluna no pai gerado. Cada elemento consiste em uma coluna de capítulo, uma nova coluna, uma coluna calculada ou um valor resultante de uma função de agregação no Recordset filho.
grp-field-list
- Uma lista de colunas nos objetos Recordset pai e filho que especifica o modo de agrupamento das linhas no filho. Para cada coluna em grp-field-list, há uma coluna correspondente nos objetos Recordset pai e filho. Para cada linha no Recordset pai, são exibidos valores exclusivos nas colunas grp-field-list, e o Recordset filho referenciado pela linha pai consiste apenas em linhas filho cujas colunas grp-field-list têm os mesmos valores da linha pai.
Se a cláusula BY for incluída, as linhas do Recordset filho serão agrupadas com base nas colunas na cláusula COMPUTE. O Recordset pai conterá uma linha para cada grupo de linhas no Recordset filho.
Se a cláusula BY for omitida, todo o Recordset filho será tratado como um único grupo e o Recordset pai conterá exatamente uma linha. Essa linha fará referência a todo o Recordset filho. A omissão da cláusula BY permite calcular o "total geral" de agregados em todo o Recordset filho.
Por exemplo:
SHAPE {select * from Orders} AS orders
COMPUTE orders, SUM(orders.OrderAmount) as TotalSales
Independentemente do modo de formação do Recordset pai (usando COMPUTE ou APPEND), ele conterá uma coluna de capítulo usada para relacioná-lo a um Recordset filho. Se você desejar, o Recordset pai também poderá conter colunas com agregados (SUM, MIN, MAX etc.) nas linhas filho. Os objetos Recordset pai e filho podem conter colunas com uma expressão na linha de Recordset, bem como colunas novas e inicialmente vazias.
Operação
child-command é emitido para o provedor, que retorna um Recordset filho.
A cláusula COMPUTE especifica as colunas do Recordset pai, que pode ser uma referência ao Recordset filho, um ou mais agregados, uma expressão calculada ou novas colunas. Se houver uma cláusula BY, as colunas definidas por ela também serão acrescentadas ao Recordset pai. A cláusula BY especifica o modo de agrupamento do Recordset filho.
Por exemplo, suponha que você tenha uma tabela — Demografia — contendo os campos Estado, Cidade e População (os números referentes à população são apenas para fins ilustrativos).
Estado |
Cidade |
População |
---|---|---|
WA |
Seattle |
700.000 |
OU |
Medford |
200.000 |
OU |
Portland |
400.000 |
CA |
Los Angeles |
800,000 |
CA |
San Diego |
600.000 |
WA |
Tacoma |
US$ 500.000 |
OU |
Corvallis |
300,000 |
Agora, emita este comando shape:
rst.Open "SHAPE {select * from demographics} AS rs " & _
"COMPUTE rs, SUM(rs.population) BY state", _
objConnection
O comando abre um Recordset com formato de dois níveis. O nível principal é um Conjunto de Registos gerado com uma coluna agregada (SUM(rs.population), uma coluna que referencia o Conjunto de Registos subordinado (rs) e uma coluna para agrupar o Conjunto de Registos subordinado (estado). O nível subordinado é o Conjunto de registos devolvido pelo comando de consulta (), uma coluna que referencia o conjunto de registos subordinado (rs) e uma coluna para agrupar o Conjunto de Registos subordinado (estado ). O nível subordinado é o Conjunto de registos devolvido pelo comando de consulta (selecione * em dados demográficos ).
As linhas de detalhes do Conjunto de registos subordinados serão agrupadas por estado, mas não por nenhuma ordem específica. Ou seja, os grupos não estarão por ordem alfabética ou numérica. Se pretender que o Conjunto de Registos principal seja encomendado, pode utilizar o método Ordenação do Conjunto de Registos para ordenar o Conjunto de Registos principal.
Agora, você pode navegar pelo Recordset pai aberto e acessar os objetos Recordset filho de detalhes. Para obter mais informações, consulte Acessando linhas em um conjunto de registros hierárquico.
Conjuntos de registros de detalhes pai e filho resultantes
Parent
SUM (rs.Population) |
rs |
Estado |
---|---|---|
1,300,000 |
Referência ao filho1 |
CA |
1.200.000 |
Referência ao filho2 |
WA |
1,100,000 |
Referência ao filho3 |
OU |
Subordinado1
Estado |
Cidade |
População |
---|---|---|
CA |
Los Angeles |
800,000 |
CA |
San Diego |
600.000 |
Subordinado2
Estado |
Cidade |
População |
---|---|---|
WA |
Seattle |
700.000 |
WA |
Tacoma |
US$ 500.000 |
Subordinado3
Estado |
Cidade |
População |
---|---|---|
OU |
Medford |
200.000 |
OU |
Portland |
400.000 |
OU |
Corvallis |
300,000 |