Compartir a través de


Cláusula de forma Compute

Se aplica a: Access 2013, Office 2013

Una cláusula COMPUTE del comando Shape genera un objeto Recordset primario, cuyas columnas se componen de una referencia al objeto Recordset secundario; columnas opcionales cuyo contenido son columnas de capítulo, nuevas o calculadas, o bien el resultado de ejecutar funciones de agregado en el objeto Recordset secundario o un objeto Recordset al que se ha aplicado forma anteriormente; así como cualquier columna del objeto Recordset secundario que aparezca en la cláusula opcional BY.

Sintaxis

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

Descripción

Los elementos de esta cláusula son los siguientes:

  • comando secundario

    • Consta de uno de los siguientes elementos:

      • Un 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. Suele ser el lenguaje SQL, si bien ADO no requiere ningún lenguaje de consulta en particular.

      • El nombre de un objeto Recordset con forma existente.

      • Otro comando Shape.

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

  • alias secundario

    • Un alias utilizado para hacer referencia al objeto Recordset devuelto por el comando secundario. El alias secundario se requiere en la lista de columnas de la cláusula COMPUTE y define la relación entre los objetos Recordset primario y secundario.
  • lista de columnas adjuntas

    • Una lista donde cada elemento define una columna en el objeto primario generado. Cada elemento contiene una columna de capítulo, una columna nueva, una columna calculada o un valor resultante de una función de agregado en el objeto Recordset secundario.
  • lista de campos agrupados

    • Una lista de columnas en el objeto Recordset primario y secundario que especifica cómo deben agruparse las filas en el objeto secundario. Por cada columna de la lista de campos agrupados, hay una columna correspondiente en los objetos Recordset primario y secundario. Por cada fila del objeto Recordset primario, las columnas de la lista de campos agrupados tienen valores únicos, y el objeto Recordset secundario al que hace referencia la fila primaria consta sólo de filas secundarias cuyas columnas de la lista de campos agrupados tienen los mismos valores que la fila primaria.

Si se incluye la cláusula BY, las filas del objeto Recordset secundario se agruparán basándose en las columnas de la cláusula COMPUTE. El objeto Recordset primario contendrá una fila por cada grupo de filas en el objeto Recordset secundario.

Si se omite la cláusula BY, todo el objeto Recordset secundario se trata como un solo grupo y el objeto Recordset primario contendrá exactamente una fila. Esa fila hará referencia a todo el objeto Recordset secundario. Si se omite la cláusula BY, se podrán 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 cómo se forme el objeto Recordset primario (mediante COMPUTE o APPEND), 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 contener columnas con agregados (SUMA, MIN, MAX, etc.) de las filas secundarias. Tanto el objeto Recordset primario como el secundario pueden incluir columnas que contienen una expresión en la fila del objeto Recordset, así como columnas nuevas e inicialmente vacías.

Operación

El comando secundario se emite al proveedor, que devuelve un objeto Recordset secundario.

La cláusula COMPUTE especifica las columnas del objeto Recordset primario, que pueden 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 tenemos una tabla denominada Demographics (Datos demográficos) que consta de los campos Estado, Ciudad y Población (los datos de población son a título ilustrativo).

Estado

Ciudad

Población

WA

Seattle

700 000.

OR

Medford

200.000

OR

Portland

400,000

CA

Los Ángeles

800,000

CA

San Diego

600.000

WA

Tacoma

500 000

OR

Corvallis

300,000

Emita ahora este comando Shape:

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

Este comando abre un objeto Recordset con forma que consta de 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 (estado ). El nivel secundario es el objeto Recordset devuelto por el comando de consulta (), una columna que hace referencia al objeto Recordset secundario (rs ) y una columna para agrupar el objeto Recordset secundario (estado ). El nivel secundario es el objeto Recordset devuelto por el comando de consulta (seleccione * de datos demográficos ).

Las filas de detalle del objeto Recordset secundario se agruparán por estado, pero por lo demás en 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 obtener acceso a los objetos Recordset secundarios de detalle. Para obtener más información, vea Obtener acceso a las filas de un objeto Recordset jerárquico.

Objetos Recordset primarios y secundarios de detalle resultantes

Parent

SUM (rs.Population)

rs

Estado

1,300,000

Referencia a secundario1

CA

1 200 000

Referencia a secundario2

WA

1,100,000

Referencia a secundario3

OR

Child1

Estado

Ciudad

Población

CA

Los Ángeles

800,000

CA

San Diego

600.000

Child2

Estado

Ciudad

Población

WA

Seattle

700 000.

WA

Tacoma

500 000

Child3

Estado

Ciudad

Población

OR

Medford

200.000

OR

Portland

400,000

OR

Corvallis

300,000