SSIS平面文件源行重组

时间:2014-10-17 19:40:02

标签: sql-server ssis

我有一个包含数千条记录的平面文件源(在某些情况下大于100K)。此源是外部采购的,我无法请求布局修订。

在此平面文件中,每行包含四列:

| User ID     | Status_1  | Status_2 | Status_3
|    1337     | Green     | Yellow   | Red
|    1234     | Red       | Red      | Green

目标表旨在接受两列:

| User ID     | Status Codes
|    1337     |    Green
|    1337     |    Yellow
|    1337     |    Red
|    1234     |    Red
|    1234     |    Red
|    1234     |    Green

到目前为止,我一直在为目标表运行3个不同的SSIS包,一个用于平面文件中的每个状态列。

我想要的是使用单个SSIS包,并创建另一个平面文件目标或临时表来镜像目标表,并从那里导入。

这可以实现吗?如果是这样,使用的最佳做法是什么,而不仅仅是UPDATE& SET到临时表。

1 个答案:

答案 0 :(得分:1)

嘿,看起来好像是一个好的SQL的案例。我会在这个上使用UNPIVOT。

http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

该链接有一个很好的例子,看起来与您的数据非常相似:

--Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO

当我是数据仓库时,我的一半工作似乎就是通过电子表格使用UNPIVOT来处理垃圾数据。