我有一个包含数千条记录的平面文件源(在某些情况下大于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
到临时表。
答案 0 :(得分:1)
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来处理垃圾数据。