(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结果相结合。
非常感谢任何输入!
答案 0 :(得分:1)
您可以使用UNPIVOT转换,它应该类似于
或者您可以将数据加载到临时表并使用TSQL UNPIVOT
函数:
if ({ElemScenario.Type} != "Basic Path") {
{ElemScenario.Type}
}
或稍微延长,但更灵活的是使用CROSS APPLY
和table 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