一段时间以来,我们一直在使用Excel文件来存储我们的购买数据。此电子表格文件具有统一的结构。由于它有很多属性,我只想说出最重要的属性。
在此Excel文件中,我们有产品ID的列,每种产品的尺寸以及产品ID和尺寸的每种合成的数量。
问题是,我们有几家商店,每家商店都收到不同数量的商品。因此,在每个excel中,我们为每个商店都有一个列,我们在其中放置从每个商店中订购的数量。
所以,我想要做的是遍历每个商店的列,将每个商店的相应数量添加到特定商店。
例如,
INSERT INTO MyTable (product_ID, size_ID, store_ID, quantity)
VALUES (12345, 34, Mirkwood, 1)
然后,重复每列。
我一直在努力为此寻找解决方案,但尚未弄明白。我非常感谢所有的帮助或提示。
答案 0 :(得分:1)
避免尝试在SSIS中创建一些复杂的,动态的循环代码。
分割流程会更加简单,因此您拥有product_id
,size_id
和一个商店的数据。使用您已知的store_id
为每个商店执行插入。
虽然循环解决方案听起来不错,但可能意味着您在添加新商店时不必更新代码,但在SSIS中实施起来会很复杂,我猜你不是经常添加商店以使努力变得有价值。
答案 1 :(得分:0)
您可以使用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/