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 函数