Shape COMPUTE 子句

shape COMPUTE 子句生成一个父 Recordset,其列包括对子 Recordset的引用;可选列可以包括章节列、新列或计算列,或者对子 Recordset 或之前形成的 Recordset执行聚合函数的结果;以及在可选的 BY 子句中列出的子 Recordset 的所有列。

语法

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

描述

此子句的各部分如下所示:

子命令
由以下项之一组成:

  • 在大括号(“{}”)内返回子 Recordset 对象的查询命令。 该命令将颁发给基础数据提供程序,其语法取决于该提供程序的要求。 这通常是 SQL 语言,尽管 ADO 不需要任何特定的查询语言。

  • 现有形状 Recordset的名称。

  • 另一个形状命令。

  • 在数据提供程序中,TABLE 关键字后跟的是表的名称。

子别名
用于引用 子命令返回的 Recordset 的别名。 COMPUTE 子句的列列表中需要 子别名,并定义父 Recordset 对象之间的关系。

附加列列表
一个列表,其中每个元素定义生成的父元素的列。 每个元素都包含章节列、新列、计算列或由子 Recordset上的聚合函数生成的值。

grp-field-list
父和子 Recordset 对象中的列列表,该列表指定如何在子记录中对行进行分组。

对于 grp-field-list 中的每个列, 子对象和父 Recordset 对象中都有相应的列。 对于父 Recordset中的每个行,grp-field-list 列具有唯一值,父行引用的子 Recordset 仅包含其 grp-field-list 列与父行相同的子行。

如果包含 BY 子句,则子记录集 的行将基于 COMPUTE 子句中的列进行分组。 父 Recordset 将包含子 Recordset中每组行的一行。

如果省略 BY 子句,则整个子 Recordset 被视为单个组,父 Recordset 将仅包含一行。 该行将引用整个子 数据集。 通过省略 BY 子句,您可以计算整个子 Recordset的“全局总计”聚合。

例如:

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

无论以哪种方式形成父 Recordset(使用 COMPUTE 或使用 APPEND),它都将包含一个章节列,用于将其与子 Recordset相关联。 如果需要,父 Recordset 还可能包含子行上的聚合(SUM、MIN、MAX 等)的列。 父级和子级 记录集 可能包含在 记录集行上的表达式的列,以及新的列和最初为空的列。

操作

子命令 发送到提供程序,该程序返回一个子记录集 Recordset

COMPUTE 子句指定父 Recordset的列,这些列可能包括对子 Recordset的引用、一个或多个聚合、计算表达式或新列。 如果有 BY 子句,则它定义的列也会追加到父 Recordset。 BY 子句指定如何对子 Recordset 的行进行分组。

例如,假设你有一个名为“人口统计”的表,其中包含“州”、“城市”和“人口”字段。 (表中的人口数字仅作为示例提供)。

城市 人口
WA 西雅图 700,000
梅德福 200,000
波特兰 400,000
CA 洛杉矶 800,000
CA 圣地亚哥 600,000
WA 塔科马 500,000
Corvallis 300,000

现在,发出此形状命令:

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

此命令将打开一个具有两级结构的 Recordset。 父级是一个生成的 记录集,其中包含一个聚合列(SUM(rs.population))、一个引用子 记录集rs)的列,以及一个用于对子 记录集state)进行分组的列。 子级别是查询命令(select * from demographics)返回的 Recordset

Recordset 详细信息行将按状态分组,否则不会按特定顺序分组。 也就是说,这些组不会按字母顺序或数字顺序排列。 如果希望对父 Recordset 进行排序,可以使用 Recordset 排序 方法对父 Recordset进行排序。

现在可以导航已打开的父记录集 Recordset,并访问子详细记录集对象 Recordset。 有关详细信息,请参阅 访问分层记录集中的行

生成的父和子详细信息记录集

父母

SUM (rs.人口) rs
1,300,000 对 child1 的引用 CA
1,200,000 对 child2 的引用
1,100,000 对 child3 的引用 或者

子1

城市 人口
CA 洛杉矶 800,000
CA 圣地亚哥 600,000

第二个孩子

城市 人口
WA 西雅图 700,000
华盛顿州 塔科马 500,000

Child3

城市 人口
梅德福 200,000
波特兰 400,000
Corvallis 300,000

另请参阅

访问分层记录集中的记录行
数据整形概述
字段对象
正式形式语法
Recordset 对象 (ADO)
数据整形所需的提供程序
Shape 追加子句
常规 中的 形状命令
Value 属性 (ADO)
Visual Basic for Applications 函数