Преобразование SSIS (почти как опора) - PullRequest
1 голос
/ 18 января 2011

У меня есть следующие данные, поступающие в SSIS

Set   Value
---   -------
1     One
1     Two
1     Three
2     Four
2     Five
2     Six

Я хочу преобразовать его в

Set   ValueList
---   -------
1     One, Two, Three
2     Four, Five, Six

Как мне это сделать в SSIS?

Ответы [ 2 ]

1 голос
/ 19 января 2011

Я использовал компонент Script для конкатенации строк между строками

string TagId = "-1";
string TagList = "";
bool IsFirstRow = true;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (Row.TAGSId.ToString() == TagId)
    {
        TagList += Row.TAG + ",";
    }
    else
    {
        if (IsFirstRow)
        {
            Output0Buffer.AddRow();
            IsFirstRow = false;
        }

        TagId = Row.TAGSId.ToString();
        TagList = Row.TAG.ToString() + ",";
    }

    Output0Buffer.TagId = int.Parse(TagId);
    Output0Buffer.TagList = TagList;
    Output0Buffer.TagLength = TagList.Length;

    //variable used in subsequent queries
    this.Variables.TagList = TagList;
}
1 голос
/ 18 января 2011

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

Кроме того, вы можете использовать поток данных, чтобы поместить данные в промежуточную таблицу, и выполнить поворот с помощью SQL или выполнить поворот в SQL, который вы используете для создания источника входных данных. Если вы хотите сделать это в коде SQl, это может помочь:

select 1 as Item 
into #test 
union select 2 
union select 3 
union select 4 
union select 5 

select STUFF((SELECT  ', ' + cast(Item as nvarchar) 
        FROM #test 
        FOR XML PATH('')), 1, 1, '') 
...