SSIS Unpivot包括列名

时间:2016-07-28 12:19:23

标签: sql-server-2008 ssis bids unpivot

(SQL Server 2008上的BIDS)

我有一个平面文件(竖线分隔),我已成功解析为以下格式:

AccountID    FreeText1    FreeText2    FreeText3    FreeText4
1            Some text    More text    Other text   Different Text
2            Some text    More text    Other text   Different Text
3            Some text    More text    Other text   Different Text

我需要最终结果如下:

AccountID    Title      TheData
1            FreeText1  Some text
1            FreeText2  More text
1            FreeText3  Other text
1            FreeText4  Different Text
2            FreeText1  Some text
2            FreeText2  More text
2            Freetext3  Other text
2            FreeText4  Different Text
3            FreeText1  Some text
3            FreeText2  More text
3            FreeText3  Other text
3            FreeText4  Different Text

我仍然是SSIS的新手,所以我要去学习。我在Unpivot转换中找到的所有内容似乎都是我需要的,但我无法弄清楚如何根据列的名称(“FreeText1”等)将其转换为Unpivot,我也无法做到完全掌握如何设置Unpivot变换甚至接近所需的结果。

我还没有找到任何我可以在Derived Column中使用的SSIS公式来以编程方式获取列名,我想也许我可以在Derived Column中生成列名,然后Merge Join the two together ...但是看起来不是一个非常有效的方法,无论如何我无法使它工作。我已经尝试设置派生列以在硬代码中返回列名(例如,使用“FreeText1”作为公式),但是我仍然不确定如何将其与Unpivoted结果相结合。

非常感谢任何输入!

2 个答案:

答案 0 :(得分:1)

您可以使用UNPIVOT转换,它应该类似于

enter image description here

或者您可以将数据加载到临时表并使用TSQL UNPIVOT函数:

if ({ElemScenario.Type} != "Basic Path") {
    {ElemScenario.Type}
}

或稍微延长,但更灵活的是使用CROSS APPLYtable value constructor来取消数据。 e.g。

SELECT  upvt.AccountID, upvt.Title, upvt.TheData
FROM    dbo.StagingTable AS t
UNPIVOT (Title FOR TheData IN (FreeText1, FreeText2, FreeText3, FreeText4)) AS upvt;

答案 1 :(得分:0)

我发现对于某些人来说,UnPivot比学习它更值得学习,所以我总是在可能的情况下避免使用它。如果你想采取不同的方法,你可以这样做:

将数据加载到临时表中并对其运行以下查询:

CompositeEditor