FlexPivot for WinForms
結合
C1DataEngineの概要 > C1DataEngine の使用 > 結合

これまでのトピックで説明したクエリーは、すべて1つのテーブルに基づいていました。ただし、クエリーが1つのテーブルに制限されることはなく、複数のテーブルにクエリーを適用することは重要です。

結合は DataEngine クエリーのたいへん重要な機能です。結合を使用して、複数のテーブル(基本テーブルまたはクエリー)のデータを結合(ブレンド)できます。結合クエリーは、計算や集計の操作を使用しない特殊なクエリーです。このクエリーが果たす目的は、テーブルを結合することだけです。「演算とクエリーの組み合わせ」トピックで説明したように、結合クエリーを含むすべての DataEngine クエリーを制限なく組み合わせることができるため、計算や集計(小計)が必要な場合は、結合したテーブルに対して同様に計算や集計を実行します。

DataEngine の結合は常に多対1です。これは、データ分析では一般的な「スタースキーマ」に対応します。このため、1つのメインテーブルと、メインテーブルにリンクされるいくつかの「アタッチ」テーブルがあります。結合結果には、メインテーブルと同数の行が含まれます。結合された行の各々には、結果に含まれるメインテーブル列(通常はすべての列が含まれますが、一部の場合もあります)の各列の値、および結果に含まれる各リンクテーブル内の列(通常はリンクテーブルの一部の列だけが含まれます)の各列の値が含まれます。

次に、結合の例を示します。

構文

Dim jq As dynamic = workspace.join("query_join", od, New With { _
        Key .od = od.ProductID + od.OrderID, _
        Key .pr = pr.UnitsInStock Or od.ProductID = pr.ProductID _
})
 dynamic jq = workspace.join("query_join", od, new
    {
        od = od.ProductID + od.OrderID, 
    // OrderDetails テーブルから ProductID と OrderID を取得します
        pr = pr.UnitsInStock | od.ProductID == pr.ProductID 
    // Products テーブルから UnitsInStock を取得し、ProductID フィールドに基づいて OrderDetails テーブルと Products テーブルを結合します
    });

メインテーブルは、2番目のパラメータ od で指定されています(先の OrderDetails テーブル)。1行目はメインテーブルに適用され、メインテーブルから結果として取得する列を定義しています。この場合は、ProductID と OrderID の2列を取得します。メインテーブル行はオプションです。この行がない場合は、メインテーブルのすべての列が結合に含まれます。

2行目はリンクテーブル Products、およびそのテーブルから取得するフィールド UnitsInStock を定義しています。また、セパレータ | の後で、Products をメインテーブル OrderDetails にリンクする方法を定義しています。リンク(結合)条件は、両方の1つ以上の列(通常、このような列はキー列と呼ばれます)が「等しい」という条件になります。

次に、より一般的な例として、複数のリンクテーブル(ただし、メインテーブルは1つのみ)を使用し、複数のキー列を結合条件にします(メインテーブル - Orders、リンクテーブル - Customers、Employees)。

構文

Dim jq As dynamic = workspace.join("join2", orders, New With { _
        Key .customers = customers.Company + customers.Country Or orders.CustomerID = customers.customerID, _
        Key .employees = employees.Name + employees.Title Or orders.EmployeeID = employees.EmployeeID + orders.CustomerID = customers.customerID _
})
dynamic jq = workspace.join("join2", orders, new
    {
        customers = customers.Company + customers.Country | orders.CustomerID == customers.customerID,
        employees = employees.Name + employees.Title | orders.EmployeeID == employees.EmployeeID + orders.CustomerID == customers.customerID
    });

デフォルトでは、結果内の列は、メインテーブルやリンクテーブルにある列と同じ名前を維持します。ただし、これらの名前は競合する可能性があるため、結果内の列の名前を変更しなければならない場合があります(列に別の名前を付けたいこともあります)。

メインテーブルの列の名前は常に維持されますが、次のように、リンク列の名前は As("alias") を使用して変更できます。

サンプルのタイトル
コードのコピー
customers = customers.Company.As("CustomerCompany") + customers.Country | orders.CustomerID ==
    customers.customerID,

システムの次の場所に格納されている製品サンプル DataEngineQueries を参照して、FlexPivot を使用する場合と使用しない場合の結合の使用方法を確認してください。

C:\...\Documents\ComponentOne Samples\WinForms\DataEngineQueries

また、システムの次の場所に格納されている製品サンプル DataJoin を参照して、ユーザーが選択したテーブルとフィールドに基づいて結合クエリーを動的に構築する方法を確認してください。

C:\...\Documents\ComponentOne Samples\WinForms\DataJoin