2009-02-26 7 views
2

Je me demande s'il existe un moyen d'effectuer une jointure entre requêtes dans SSIS sans utiliser de table temporaire sur mon serveur. Étant donné deux tables, comptes et groupes.Utiliser SSIS pour faire une requête entre

Comptes contient une liste de comptes avec une plage supérieure et inférieure pour définir une liste de clients. Les groupes contiennent tous les clients. Je veux pouvoir joindre les tables afin que j'obtienne tous les comptes et les clients attachés à ces comptes. Si c'était juste un compte que j'ai requis, je pourrais utiliser une division conditionnelle cependant je veux tous les comptes et tous les clients des groupes.

Les tables proviennent de systèmes distincts, donc placer la requête dans une source de données n'est pas une option.

Si les tables étaient sur le même système, je pourrais utiliser la requête suivante.

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

Toutes les idées sur la procédure à suivre dans un package SSIS. Je n'aime vraiment pas ma méthode actuelle d'enregistrer les deux tables sur le serveur, mais j'ai du mal à trouver un moyen de le faire dans une seule tâche de flux de données.

Répondre

2

Je suppose que chaque client appartient à un seul compte, et les gammes de groupe ne se croisent pas?

Alors je ferais quelque chose comme ceci:

1) Trier les tables par groupe (il suffit d'utiliser la LowerGroup de la table des comptes)

2) jointure par fusion complète par groupe. Cela vous donnera table comme

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

3) Un simple script de transformation qui fera ce qui suit:

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 

Vous obtiendrez

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

Michael qui est en fait une très bonne idée et pas quelque chose que j'ai même consiered. (c'est quelque chose que je peux utiliser pour certains de mes autres paquets merci) Cependant dans mon cas les gammes de groupe se croisent. Les clients peuvent appartenir à plusieurs comptes. Est-ce que mon cas est désespéré? –

+0

Vous pouvez toujours essayer quelque chose comme ça avec plusieurs groupes de course: (1) créer deux rangées pour chaque groupe, une pour la limite inférieure, une pour la partie supérieure. (2) fusion complète jointe (3) le script devient plus complexe - garder une trace de la liste des groupes, et de sortie plusieurs lignes (un pour chaque élément de la liste). – Michael

Questions connexes