[英]SSIS - Loop through columns
一段时间以来,我们一直在使用excel文件存储购买数据。 该电子表格文件具有统一的结构。 因为它具有很多属性,所以我只想列举最重要的属性。
在此Excel文件中,我们具有产品ID列,每种产品的尺寸以及每种产品ID和尺寸的组合的数量。
问题是,我们有几家商店,每个商店每种产品收到不同数量的商品。 因此,在每个excel中,我们为每个商店都有一列,其中放置了从每个组合中订购的数量。
因此,我想做的是遍历每个商店的列,以将每种组合的相应数量添加到特定商店。
例如,
INSERT INTO MyTable (product_ID, size_ID, store_ID, quantity)
VALUES (12345, 34, Mirkwood, 1)
然后,对每列重复一次。
我一直在尝试为此找到解决方案,但还没有弄清楚。 我真的很感谢所有帮助或提示。
避免尝试在SSIS中创建一些复杂的,动态的循环代码。
拆分流会更简单,因此您拥有一个商店的product_id
, size_id
和数据。 使用您已经知道的store_id
对每个商店执行插入操作。
虽然循环解决方案听起来不错,并且可能意味着添加新商店时不必更新代码,但是在SSIS中,实现起来很复杂,我猜您不是在频繁添加商店来创建新商店。努力值得。
您可以使用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;
这种方法的唯一问题是,如果添加了更多的列(存储),它将无法处理。 但您可以使其动态化: https : //www.mssqltips.com/sqlservertip/3002/use-sql-servers-unpivot-operator-to-dynamically-normalize-output/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.