SSIS – 通过列循环

一段时间以来,我们一直在使用excel文件来存储我们的购买数据。 该电子表格文件具有统一的结构。 由于它具有相当多的属性,我只想列举最重要的属性。

在这个Excel文件中,我们有产品ID的列,每个产品的尺寸以及产品ID和尺寸的每个组合的数量。

问题是,我们有几家商店,他们每个产品收到不同的数量。 所以,在每一个excel中,我们都有一个每个商店的专栏,在这个专栏中我们放置了从每个复合材料订购的数量。

在这里输入图像说明

所以,我想要做的是循环遍历每个商店的列,以添加每个组合的相应数量到特定的商店。

例如,

INSERT INTO MyTable (product_ID, size_ID, store_ID, quantity) VALUES (12345, 34, Mirkwood, 1) 

然后,重复每一列。

我一直在试图find一个解决scheme,但还没有弄清楚。 我真的很感激所有的帮助或提示。

您可以使用unpivot组件

选中的列将是您需要转换为行的列。 “目标”列是要放入数据的列。透视键值列名称:透视列的名称。

在这里输入图像说明

在这里输入图像说明

之后,你可以正常插入行。

另一种方法是通过sql,我在这里使用t-sql,但其他数据库应该有类似的东西。 首先将您的原始数据导入到一个表格中。 然后使用unpivot来做与上面类似的事情。

  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 select * from #pvt --Unpivot the table. SELECT VendorID, Employee, Orders – destination table, first column is row group? FROM (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5 FROM #pvt) p – detail source UNPIVOT (Orders FOR Employee IN –orders: data, For: column group (Emp1, Emp2, Emp3, Emp4, Emp5) )AS unpvt; 

这种方法唯一的问题是,如果添加更多列(存储),则无法处理。 但是,您可以使其dynamic: https : //www.mssqltips.com/sqlservertip/3002/use-sql-servers-unpivot-operator-to-dynamically-normalize-output/

避免尝试在SSIS中创build一些复杂的dynamic循环代码。

分stream的方法要简单得多,所以你需要一个商店的product_idsize_id和data。 使用您已知的store_id对每个商店执行插入操作。

虽然循环解决scheme听起来不错,可能意味着当你添加一个新的商店时,你不必更新你的代码,但是在SSIS中实现起来会很复杂,而且我估计你并没有经常添加商店,值得的努力。