Shape COMPUTE 子句

圖形 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 的名稱。

  • 另一個圖形命令。

  • TABLE 關鍵字,後面接著資料提供者中的資料表名稱。

child-alias
用來參考 child-command 所傳回 Recordset 的別名。COMPUTE 子句中的資料行清單中需要 child-alias,並定義父和子 Recordset 物件之間的關聯性。

appended-column-list
清單,其中每個元素會在產生的父代中定義一個資料行。 每個元素都包含章節資料行、新資料行、計算結果欄,或子 Recordset 上彙總函式所產生的值。

grp-field-list
父和子 Recordset 物件中的資料行清單,指定應該如何在子項中分組資料列。

針對 grp-field-list 中的每個資料行,子和父 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 中資料列上的運算式,以及一開始為空白的新資料行。

作業

child-command 會發給提供者,藉此傳回子 Recordset

COMPUTE 子句會指定父 Recordset 的資料行,其可能是子 Recordset、一或多個彙總、計算運算式或新資料行的參考。 若有 BY 子句,其定義的資料行也會附加至父 Recordset。 BY 子句會指定子 Recordset 的資料列如何分組。

例如,假設您有一個名為 Demographics 的資料表,其中包含 State、City 和 Population 欄位。 (資料表中的人口數僅提供作為範例)。

狀態 City 母體
WA 西雅圖 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

現在,發出此圖形命令:

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 詳細資料列會依狀態分組,但不會依特定順序。 也就是說,群組不會依字母或數字順序排列。 如果想要排序父 Recordset,您可以使用 Recordset Sort 方法來排序父 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 西雅圖 700,000
WA Tacoma 500,000

Child3

狀態 City 母體
OR Medford 200,000
OR Portland 400,000
OR Corvallis 300,000

另請參閱

存取階層式資料錄集中的資料列
資料成形概觀
Field 物件
正式 Shape 文法
Recordset 物件 (ADO)
資料成形所需的提供者
Shape APPEND 子句
一般 Shape 命令
Value 屬性 (ADO)
Visual Basic for Applications 函式