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 の関数