2009-02-26 2 views
2

私のサーバー上で一時テーブルを使用せずにSSISでクエリ間結合を行う方法があるのだろうかと思います。SSISを使用してクエリ間を処理する

アカウントとグループの2つのテーブルが指定されています。勘定科目には、顧客リストを定義するための上限と下限の範囲を持つ勘定の一覧が含まれています。グループにはすべての顧客が含まれます。

テーブルに参加して、すべてのアカウントとその顧客に割り当てられた顧客を取得できるようにしたいと考えています。必要なアカウントが1つだけの場合は、条件付き分割を使用することができますが、すべてのアカウントとすべての顧客をグループから欲しがります。

テーブルは別々のシステムから来ているので、1つのデータソースにクエリを配置することはできません。

テーブルが同じシステム上にあった場合は、次のクエリを使用できます。

SELECT 
    Accounts.Account, 
    Groups.Customer 
FROM 
    Accounts, 
    Groups 
WHERE 
    Accounts.AccountType = 1 AND 
    Groups.GroupName BETWEEN Accounts.LowerGroup AND Accounts.UpperGroup 

SSISパッケージでこれを行う方法に関するアイデア。私は現在、両方のテーブルをサーバに保存する私の現在の方法を嫌っていますが、私は単一のデータフロータスクでそれを行う方法を見つけるのに苦労しています。

答えて

2

私は各顧客が単一のアカウントに属し、グループの範囲が交差しないと仮定しますか?

それから私はこのような何かをするだろう:

1)

2)全マージは、グループで参加(ちょうどアカウントテーブルからLowerGroupを使用)グループによる両方のテーブルを並べ替えます。これは、単純なスクリプトはそれが次の操作を行います変換)

Account Group Customer 
A1  G1 NULL 
NULL G2 C1 
NULL G3 C2 
A2  G4 NULL 
NULL G5 C3 
NULL G6 C4 

3のように、あなたのテーブルを与える:

If Customer is NULL 
    Store the Account to member variable, and skip this row 
    Else 
    Copy stored Account to the Account column, output the row 

あなたは

Account Group Customer 
A1  G2 C1 
A1  G3 C2 
A2  G5 C3 
A2  G6 C4 
+0

マイケルを買ってあげることが、実際には本当に良いアイデアです私がコンシールしたものではありません。 (これは私の他のパッケージのいくつかに感謝しています)私の場合、グループの範囲は交差します。お客様は複数のアカウントに所属することができます。私の場合は絶望的なものですか? –

+0

あなたはまだ複数の実行グループのようなものを試してみるかもしれません: (1)グループごとに2つの行を作成します。 (2)フルマージ結合 (3)スクリプトはより複雑になります。グループのリストを追跡し、複数の行を出力します(リスト内の各項目に1つずつ)。 – Michael

関連する問題