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