Shape COMPUTE 子句
shape COMPUTE 子句產生父 Recordset,這些欄位由子 Recordset的引用構成;可以包含的其他欄位是內容為章節、new 或計算資料行,或者是對子 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 關鍵詞,後面接著數據提供者中的數據表名稱。
子別名
用來參考 child-command 所傳回 Recordset 的別名。 COMPUTE 子句中的數據行清單中需要 子別名,並定義父系和子系 Recordset 物件之間的關聯性。
附加列清單
清單,其中每個元素都會在生成的父項中定義欄。 每個元素都包含章節數據行、新數據行、匯出數據行,或子 Recordset上聚合函數所產生的值。
grp-field-list
父系和子系 Recordset 物件中的欄位清單,指定如何在子系中分組數據行。
對於 grp-field-list 中的每個欄位, 子系和父系 Recordset 物件中有對應的欄位。 針對父 Recordset中的每個數據列,grp-field-list 數據行都有唯一值,而父數據列所參考的子 Recordset 只包含其 grp-field-list 數據行與父數據列相同的子數據列。
如果包含 BY 子句,則會根據 COMPUTE 子句中的數據行來分組 Recordset的數據列。 父 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 可能包含在 Recordset之數據列中的表達式,以及新的和最初空白的數據列。
操作
子命令 發出後,提供者會傳回子系 Recordset。
COMPUTE 子句會指定父 Recordset的欄位,其可以是子 Recordset的參考、一個或多個彙總、計算表達式或新增欄位。 如果有 BY 子句,其定義的數據行也會附加至父系 Recordset。 BY 子句會指定子系 Recordset 的數據列如何分組。
例如,假設您有一個名為Demographics的數據表,其中包含State、City和Population欄位。 (表中的人口數據僅作為範例提供)。
州 | 城市 | 人口 |
---|---|---|
華盛頓州 | 西雅圖 | 700,000 |
或 | 梅德福 | 200,000 |
或 | 波特蘭 | 400,000 |
CA | 洛杉磯 | 800,000 |
CA | 聖地牙哥 | 600,000 |
華盛頓州 | 塔科馬 | 500,000 |
或 | 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
) 分組的數據行。 子層級是查詢命令所傳回的 Recordset (select * from demographics
)。
子系 Recordset 詳細數據列將會依狀態分組,否則不會以特定順序分組。 也就是說,群組不會依字母順序或數字順序排列。 如果您想要排序父 Recordset,您可以使用 Recordset Sort 方法來排序父 Recordset。
您現在可以巡覽已開啟的父 Recordset,並存取附屬的子詳細數據 Recordset 物件。 如需詳細資訊,請參閱 存取階層式記錄集中的數據列。
結果產生的父子詳細資料記錄集
父母
總和(rs.人口) | rs | 州 |
---|---|---|
1,300,000 | 對 "child1" 的參考 | CA |
1,200,000 | child2 的參考 | 華盛頓州 |
1,100,000 | 對 child3 的參考 | 或 |
子1
州 | 城市 | 人口 |
---|---|---|
CA | 洛杉磯 | 800,000 |
CA | 聖地牙哥 | 600,000 |
Child2
州 | 城市 | 人口 |
---|---|---|
華盛頓州 | 西雅圖 | 700,000 |
華盛頓州 | 塔科馬 | 500,000 |
孩子3
州 | 城市 | 人口 |
---|---|---|
或 | 梅德福 | 200,000 |
或 | 波特蘭 | 400,000 |
或 | Corvallis | 300,000 |
另請參閱
存取階層式記錄集中的數據列
數據成形概觀
欄位物件
正式形狀文法
Recordset 物件 (ADO)
數據成形 的必要提供者
Shape 附加 子句
一般 形狀指令
Value 屬性 (ADO)
Visual Basic for Applications 函式