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 オブジェクト間の関係を定義します。
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 内の行グループごとに 1 行が含まれます。
BY 句を省略すると、子 Recordset 全体が 1 つのグループとして扱われ、親 Recordset には 1 行のみが含まれます。 その行は、子 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、1 つ以上の集計、計算式、または新しい列への参照である可能性があります。 BY 句がある場合、それによって定義される列も親 Recordset に追加されます。 BY 句は、子 Recordset の行をグループ化する方法を指定します。
たとえば、州、都市、人口のフィールドで構成される人口統計という名前のテーブルがあるとします (テーブル内の人口の数字は、単なる例として示されています)。
State | 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
このコマンドは、2 つのレベルがあるシェイプされた Recordset を開きます。 親レベルは、集計列 (SUM(rs.population)
)、子 Recordset (rs
) を参照する列、子 Recordset をグループ化するための列 (state
) で生成された Recordset です。 子レベルは、クエリ コマンド () によって返される Recordsetselect * from demographics
です。
子 Recordset の詳細行は状態別にグループ化されますが、それ以外は特定の順序でグループ化されません。 つまり、グループはアルファベット順または数値順ではありません。 親 Recordset を順序付けすると、Recordset Sort メソッドを使用して親 Recordset を並べ替えることができます。
開いている親 Recordset 内を移動し、子の詳細 Recordset オブジェクトにアクセスできるようになりました。 詳細については、「階層レコードセット内の行へのアクセス」を参照してください。
結果として得られる親および子の詳細レコードセット
Parent
SUM (rs.Population) | rs | State |
---|---|---|
1,300,000 | child1 への参照 | CA |
1,200,000 | child2 への参照 | WA |
1,100,000 | child3 への参照 | OR |
Child1
State | City | [母集団] |
---|---|---|
CA | Los Angeles | 800,000 |
CA | San Diego | 600,000 |
Child2
State | City | [母集団] |
---|---|---|
WA | Seattle | 700,000 |
WA | Tacoma | 500,000 |
Child3
State | 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 の関数