У вас есть ошибка в ваших данных образца? Я не вижу, как отображение иерархии соединяется с таблицей иерархии для получения желаемых результатов, если только отображение иерархии не является teamid 1 => hierid 2 и teamid 2 => hierid 4.
Служба SSIS, возможно, не сможет это сделать (легко), поэтому может быть лучше создать источник OLEDB, который выполняет SQL следующего формата. Обратите внимание, что предполагается, что вы используете SQL Server 2008, поскольку там была представлена функция PIVOT ...
WITH hier AS (
SELECT parentseqid, sequenceid, hiername as parentname, hiername FROM TeamHierarchy
UNION ALL
SELECT hier.parentseqid, TH.sequenceid, hier.parentname, TH.hiername FROM hier
INNER JOIN TeamHierarchy TH ON TH.parentseqid = hier.sequenceid
),
teamhier AS (
SELECT T.*, THM.hierarchyid FROM Teams T
INNER JOIN TeamHierarchyMapping THM ON T.teamid = THM.teamid
)
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY teamname ORDER BY teamname, sequenceid, parentseqid) AS 'Depth', hier.parentname, teamhier.teamname
FROM hier
INNER JOIN teamhier ON hier.sequenceid = teamhier.hierarchyid
) as t1
PIVOT (MAX(parentname) FOR Depth IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])) AS pvtTable
ORDER BY teamname;
В этом есть несколько различных элементов, и может быть лучшим способом сделать это, но для выравнивания иерархий CTE идеальны.
Созданы два CTE: «hier», который заботится о выравнивании иерархии, и «teamhier», который является просто вспомогательным «представлением», чтобы впоследствии упростить объединения. Если вы просто возьмете старшую CTE и запустите ее, вы получите плоское представление:
WITH hier AS (
SELECT parentseqid, sequenceid, hiername as parentname, hiername FROM TeamHierarchy
UNION ALL
SELECT hier.parentseqid, TH.sequenceid, hier.parentname, TH.hiername FROM hier
INNER JOIN TeamHierarchy TH ON TH.parentseqid = hier.sequenceid
)
SELECT * FROM hier ORDER BY parentseqid, sequenceid
Следующая его часть в основном использует это плоское представление, присоединяет его к таблицам вашей команды (чтобы получить имя команды) и использует PIVOT SQL Server, чтобы вращать его и выровнять все так, как вы хотите. Дополнительная информация о PIVOT доступна на MSDN .
Если вы используете SQL Server 2005, тогда вы можете просто взять бит выравнивания иерархии, и вы сможете использовать собственный блок преобразования SSIV 'PIVOT', чтобы, надеюсь, выполнить грязную поворотную работу.