Использование SSIS для выполнения промежуточных запросов

Мне интересно, есть ли способ выполнить соединение между запросами в SSIS без использования временной таблицы на моем сервере.

Учитывая две таблицы, учетные записи и группы. Учетные записи содержат список учетных записей с верхним и нижним диапазоном для определения списка клиентов. Группы содержат всех клиентов.

Я хочу иметь возможность присоединиться к столам, чтобы получить все учетные записи и клиентов, привязанных к этим учетным записям. Если бы мне требовалась только одна учетная запись, я мог бы использовать условное разделение, однако мне нужны все учетные записи и все клиенты из групп.

Таблицы поступают из разных систем, поэтому размещение запроса в одном источнике данных не вариант.

Если бы таблицы были в одной системе, я мог бы использовать следующий запрос.

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

Любые идеи о том, как это сделать в пакете SSIS. Мне действительно не нравится мой текущий метод сохранения обеих таблиц на сервере, но я изо всех сил пытаюсь найти способ сделать это в одной задаче потока данных.

Ответов (1)

Решение

Я предполагаю, что каждый клиент принадлежит к одной учетной записи, а диапазоны групп не пересекаются?

Тогда я бы сделал что-то вроде этого:

1) Отсортируйте обе таблицы по группам (просто используйте нижнюю группу из таблицы учетных записей)

2) Полное объединение по группе. Это даст вам таблицу вроде

 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