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]
说明
此子句的各个部分如下所示:
child-command
包含以下内容之一:
括在大括号(“{}”)中的查询命令,它返回子 Recordset 对象。 该命令将发送到基础数据提供程序,其语法取决于该提供程序的要求。 这通常是 SQL 语言,尽管 ADO 不需要任何特定的查询语言。
现有的成形 Recordset 的名称。
另一个 shape 命令。
TABLE 关键字,后跟数据提供程序中表的名称。
child-alias
用于引用 child-command 返回的 Recordset 的别名。child-alias 在 COMPUTE 子句的列列表中是必需的,它定义父 Recordset 对象和子 Recordset 对象之间的关系。
appended-column-list
一个列表,其中每个元素定义生成的父级中的一列。 每个元素都包含一个章节列、新列、计算列或由子 Recordset 上的聚合函数生成的值。
grp-field-list
父和子 Recordset 对象中的列列表,该列表指定应如何在子级中对行进行分组。
对于 grp-field-list 中的每个列,子 Recordset 对象和父 Recordset 对象中都有一个相应的列。 对于父 Recordset 中的每个行,grp-field-list 列具有唯一值,父行引用的子 Recordset 仅包含其 grp-field-list 列与父行具有相同值的子行。
如果包含 BY 子句,子 Recordset 的行将根据 COMPUTE 子句中的列进行分组。 父 Recordset 将包含子 Recordset 中每个行组的一行。
如果省略了 BY 子句,整个子 Recordset 将被视为单个组,而父 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 和子 Recordset 的列都可以包含 Recordset 中针对行的表达式,也可以是最初为空的新列。
操作
child-command 将发送到提供程序,提供程序返回子 Recordset。
COMPUTE 子句指定父 Recordset 的列,该列可能是对子 Recordset、一个或多个聚合、计算表达式或新列的引用。 如果有 BY 子句,则它定义的列也会追加到父 Recordset。 BY 子句指定了如何对子 Recordset 的行进行分组。
例如,假设有一个名为“Demographics”的表,该表由“State”、“City”和“Population”字段组成。 (表中的人口数字仅作为示例提供)。
状态 | City | 人口数 |
---|---|---|
WA | Seattle | 700,000 |
OR | Medford | 200,000 |
OR | Portland | 400,000 |
CA | Los Angeles | 800,000 |
CA | San Diego | 600,000 |
WA | Tacoma | 500,000 |
OR | Corvallis | 300,000 |
现在,发出此 shape 命令:
rst.Open "SHAPE {select * from demographics} AS rs " & _
"COMPUTE rs, SUM(rs.population) BY state", _
objConnection
此命令打开具有两个级别的成形 Recordset。 父级别是一个生成的 Recordset,其中包含一个聚合列 (SUM(rs.population)
)、一个引用子 Recordset 的列 (rs
),以及一个用于对子 Recordset 进行分组的列 (state
)。 子级别是查询命令 (select * from demographics
) 返回的 Recordset。
子 Recordset 详细信息行将按 state 分组,但其他方面没有特定的顺序。 也就是说,这些组不会按字母顺序或数字顺序排列。 如果要对父 Recordset 进行排序,可以使用 Recordset Sort 方法对父 Recordset 进行排序。
现在可以导航打开的父 Recordset 并访问子详细信息 Recordset 对象。 有关详细信息,请参阅访问分层 Recordset 中的行。
生成的父级和子级详细信息 Recordset
Parent
SUM (rs.Population) | rs | 状态 |
---|---|---|
1,300,000 | 对 child1 的引用 | CA |
1,200,000 | 对 child2 的引用 | WA |
1,100,000 | 对 child3 的引用 | OR |
Child1
状态 | City | 人口数 |
---|---|---|
CA | Los Angeles | 800,000 |
CA | San Diego | 600,000 |
Child2
状态 | City | 人口数 |
---|---|---|
WA | Seattle | 700,000 |
WA | Tacoma | 500,000 |
Child3
状态 | City | 人口数 |
---|---|---|
OR | Medford | 200,000 |
OR | Portland | 400,000 |
OR | Corvallis | 300,000 |
另请参阅
访问分层记录集中的行
数据整理概述
字段对象
正式 Shape 语法
记录集对象 (ADO)
数据整理所需的提供程序
Shape APPEND 子句
常用 Shape 命令
Value 属性 (ADO)
Visual Basic for Applications 函数