Compartir a través de


Cláusula COMPUTE de forma

Una cláusula COMPUTE de forma genera un objeto Recordset primario, cuyas columnas constan de una referencia al objeto Recordset secundario; columnas opcionales cuyo contenido se corresponde con capítulos, columnas nuevas o calculadas, o el resultado de ejecutar funciones de agregado en el objeto Recordset secundario o en un objeto Recordset con forma anterior; y todas las columnas del objeto Recordset secundario enumeradas en la cláusula BY opcional.

Sintaxis

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

Descripción

La cláusula se compone de las siguientes partes:

child-command
Consta de los pasos siguientes:

  • Comando de consulta entre llaves ("{}") que devuelve un objeto Recordset secundario. El comando se emite al proveedor de datos subyacente y su sintaxis depende de los requisitos de ese proveedor. Normalmente, será el lenguaje SQL, aunque ADO no requiere ningún lenguaje de consulta determinado.

  • Nombre de un objeto Recordset con forma existente.

  • Otro comando shape.

  • Palabra clave TABLE, seguida del nombre de una tabla en el proveedor de datos.

child-alias
Alias usado para hacer referencia al objeto Recordset devuelto por child-command. El valor child-alias es necesario en la lista de columnas de la cláusula COMPUTE y define la relación entre los objetos Recordset primarios y secundarios.

appended-column-list
Lista en la que cada elemento define una columna en el elemento primario generado. Cada elemento contiene una columna de capítulo, una nueva columna, una columna calculada o un valor resultante de una función de agregado en el objeto Recordset secundario.

grp-field-list
Lista de columnas de los objetos Recordset primarios y secundarios que especifica cómo se deben agrupar las filas en el elemento secundario.

Para cada columna de grp-field-list hay una columna correspondiente en los objetos Recordset secundarios y primarios. Para cada fila del objeto Recordset primario, las columnas grp-field-list tienen valores únicos, y el objeto Recordset secundario al que hace referencia la fila primaria consta únicamente de filas secundarias cuyas columnas grp-field-list tienen los mismos valores que la fila primaria.

Si se incluye la cláusula BY, las filas del objeto Recordset secundarios se agruparán en función de las columnas de la cláusula COMPUTE. El objeto Recordset primario contendrá una fila para cada grupo de filas del objeto Recordset secundario.

Si se omite la cláusula BY, el objeto Recordset secundario se trata como un único grupo, y el objeto Recordset primario contendrá solamente una fila. Esa fila hará referencia a todo el objeto Recordset secundario. La omisión de la cláusula BY permite calcular agregados de "total general" en todo el objeto Recordset secundario.

Por ejemplo:

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

Independientemente de la manera en que se forme el objeto Recordset primario (mediante COMPUTE o APPEND), este contendrá una columna de capítulo que se usa para relacionarlo con un objeto Recordset secundario. Si lo desea, el objeto Recordset primario también puede tener columnas que contengan agregados (SUM, MIN, MAX, etc.) sobre las filas secundarias. Tanto el objeto Recordset primario como el secundario pueden contener columnas que incluyan una expresión en la fila del objeto Recordset, así como columnas que son nuevas e inicialmente vacías.

Operación

El valor child-command se emite al proveedor, que devuelve un objeto Recordset secundario.

La cláusula COMPUTE especifica las columnas del objeto Recordset primario, que puede ser una referencia al objeto Recordset secundario, uno o varios agregados, una expresión calculada o columnas nuevas. Si hay una cláusula BY, las columnas que define también se anexan al objeto Recordset primario. La cláusula BY especifica cómo se agrupan las filas del objeto Recordset secundario.

Por ejemplo, supongamos que tiene una tabla, denominada Demographics, que consta de los campos Estado, Ciudad y Población. (Las cifras de población de la tabla se proporcionan únicamente como ejemplo).

State City Población
WA Seattle 700 000
O BIEN Medford 200 000
O BIEN Portland 400.000
CA Los Angeles 800 000
CA San Diego 600 000
WA Tacoma 500.000
O BIEN Corvallis 300 000

Ahora, emita este comando de forma:

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

Este comando abre un objeto Recordset con forma con dos niveles. El nivel primario es un objeto Recordset generado con una columna de agregado (SUM(rs.population)), una columna que hace referencia al objeto Recordset secundario (rs) y una columna para agrupar el objeto Recordset secundario (state). El nivel secundario es el objeto Recordset devuelto por el comando de consulta (select * from demographics).

Las filas de detalles del objeto Recordset secundario se agruparán por estado, pero sin seguir ningún orden particular. Es decir, los grupos no estarán en orden alfabético ni numérico. Si desea que se ordene el objeto Recordset primario, puede usar el método Recordset Sort para ordenar el objeto Recordset primario.

Ahora puede navegar por el objeto Recordset primario abierto y acceder a los objetos Recordset de detalles secundarios. Para obtener más información, consulte: Obtener acceso a filas en un Recordset jerárquico.

Conjuntos de registros de detalles primarios y secundarios resultantes

Parent

SUM (rs. Población) rs State
1 300 000 Referencia a child1 CA
1 200 000 Referencia a child2 WA
1 100 000 Referencia a child3 O BIEN

Secundario1

State City Población
CA Los Angeles 800 000
CA San Diego 600 000

Secundario2

State City Población
WA Seattle 700 000
WA Tacoma 500.000

Secundario3

State City Población
O BIEN Medford 200 000
O BIEN Portland 400.000
O BIEN Corvallis 300 000

Consulte también

Acceso a las filas en un conjunto de registros jerárquico
Información general sobre la forma de datos
Objeto Field
Gramática formal de forma
Objeto de conjunto de registros (ADO)
Proveedores deseados para dar forma a datos
Cláusula APPEND Shape
Comandos Shape en General
Value (propiedad) (ADO)
Visual Basic para las funciones de aplicaciones