我有一个包含数千个记录的平面文件源(在某些情况下为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

最佳答案

呵呵,看起来像一个良好的ole 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。

08-07 13:34