Cláusula COMPUTE de forma
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 novas, calculadas ou de capítulo ou o resultado da execução de funções de agregação no Recordset filho ou em um Recordset formatado anterior; e todas as colunas do Recordset filho listados 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 desta cláusula são as seguintes:
child-command
Consiste em um dos seguintes:
Um comando de consulta dentro de chaves ("{}") que retorna um objeto Recordset filho. O comando é emitido para o provedor de dados subjacente, e a sintaxe dele depende dos requisitos desse provedor. Normalmente, essa será a linguagem SQL, embora o ADO não exija nenhuma linguagem de consulta específica.
O nome de um Recordset formatado existente.
Outro comando de forma.
A palavra-chave TABLE, seguida do nome de uma tabela no provedor de dados.
child-alias
Um alias usado para referenciar o Recordset retornado pelo comando filho. O alias do filho é obrigató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 contém 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 como as linhas devem ser agrupadas no filho.
Para cada coluna na grp-field-list, há uma coluna correspondente nos objetos Recordset filho e pai. Para cada linha no Recordset pai, as colunas grp-field-list têm valores exclusivos, e o Recordset filho referenciado pela linha pai consiste apenas nas 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 da cláusula COMPUTE. O Recordset pai conterá uma linha para cada grupo de linhas no Recordset filho.
Se a cláusula BY for omitida, o Recordset filho inteiro será tratado como um só grupo, e o Recordset pai conterá exatamente uma linha. Essa linha referenciará todo o Recordset filho. A omissão da cláusula BY permite que você calcule agregações de "total geral" em todo o Recordset filho.
Por exemplo:
SHAPE {select * from Orders} AS orders COMPUTE orders, SUM(orders.OrderAmount) as TotalSales
Seja qual for a forma como o Recordset pai é formado (usando COMPUTE ou usando APPEND), ele conterá uma coluna de capítulo que é usada para relacioná-lo a um Recordset filho. Se você desejar, o Recordset pai também pode conter colunas que contenham agregações (SUM, MIN, MAX etc.) nas linhas filho. O Recordset pai e filho podem conter colunas que contêm uma expressão na linha no Recordset, bem como colunas novas e inicialmente vazias.
Operação
O comando filho é 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, uma ou mais agregações, 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 como as linhas do Recordset filho são agrupadas.
Por exemplo, suponha que você tenha uma tabela, chamada Demografia, que consista nos campos Estado, Cidade e População. (Os números da população na tabela são fornecidos apenas como exemplo).
Estado | City | População |
---|---|---|
WA | Seattle | 700.000 |
OU | Medford | 200.000 |
OU | Portland | 400.000 |
AC | Los Angeles | 800.000 |
AC | San Diego | 600.000 |
WA | Tacoma | 500.000 |
OU | Corvallis | 300.000 |
Agora, emita este comando de forma:
rst.Open "SHAPE {select * from demographics} AS rs " & _
"COMPUTE rs, SUM(rs.population) BY state", _
objConnection
Esse comando abre um Recordset formatado com dois níveis. O nível pai é um Recordset gerado com uma coluna de agregação (SUM(rs.population)
), uma coluna que referencia o Recordset filho (rs
) e uma coluna usada para agrupar o Recordset filho (state
). O nível filho é o Recordset retornado pelo comando de consulta (select * from demographics
).
As linhas de detalhes do Recordset filho serão agrupadas por estado, mas, de outro modo, em nenhuma ordem específica. Ou seja, os grupos não estarão em ordem alfabética ou numérica. Caso deseje que o Recordset pai seja solicitado, use o método Recordset Sort para ordenar o Recordset pai.
Agora você pode navegar pelo Recordset pai aberto e acessar os objetos Recordset filho de detalhes. Para obter mais informações, confira Como acessar linhas em um conjunto de registros hierárquico.
Conjuntos de registros pai e filho de detalhes resultantes
Pai
SUM (rs.Population) | rs | Estado |
---|---|---|
1.300.000 | Referência a child1 | AC |
1.200.000 | Referência a child2 | WA |
1.100.000 | Referência a child3 | OU |
Filho1
Estado | City | População |
---|---|---|
AC | Los Angeles | 800.000 |
AC | San Diego | 600.000 |
Filho2
Estado | City | População |
---|---|---|
WA | Seattle | 700.000 |
WA | Tacoma | 500.000 |
Filho3
Estado | City | População |
---|---|---|
OU | Medford | 200.000 |
OU | Portland | 400.000 |
OU | Corvallis | 300.000 |
Consulte Também
Acessar linhas em um conjunto de registros hierárquicos
Visão geral de data shaping
Objeto Campo
Gramática de forma formal
Objeto Recordset (ADO)
Provedores necessários para data shaping
Cláusula APPEND de forma
Modelar comandos em geral
Propriedade Value (ADO)
Funções do Visual Basic for Applications