【问题标题】:SSIS transformation (almost like a pivot)SSIS 转换(几乎像一个支点)
【发布时间】:2011-01-18 17:09:10
【问题描述】:

我有以下数据进入 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 中执行此操作?

【问题讨论】:

    标签: sql sql-server ssis sql-server-2008-r2


    【解决方案1】:

    我使用脚本组件跨行进行字符串连接

    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;
    }
    

    【讨论】:

      【解决方案2】:

      数据流转换中有一个枢轴任务。您可以尝试一下,但我会警告您,我们对它的实施并不满意。

      或者,您可以使用数据流将数据放入临时表中,然后使用 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, '') 
      

      【讨论】:

      • 因为它来自一个 XML 文件,所以我无法使用 XML PATH 技术。我使用 SCRIPT 组件来实现我想要的。
      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2015-07-29
      • 1970-01-01
      相关资源
      最近更新 更多