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