【问题标题】:SSIS - Loop through columnsSSIS - 遍历列
【发布时间】:2016-08-02 23:30:13
【问题描述】:

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

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

问题是,我们有几家商店,每家商店收到的每种产品的数量都不同。因此,在每个 excel 中,每个商店都有一个列,我们在其中放置从每个组合订购的数量。

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

例如,

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

然后,对每一列重复。

我一直在努力寻找解决方案,但还没有弄清楚。我非常感谢所有帮助或提示。

【问题讨论】:

    标签: sql excel csv ssis


    【解决方案1】:

    避免尝试在 SSIS 中创建一些复杂、动态的循环代码。

    拆分流程会简单得多,这样您就可以拥有product_idsize_id 和一个商店的数据。使用您已经知道的 store_id 为每个商店执行插入操作。

    虽然循环解决方案听起来不错,并且可能意味着您在添加新商店时不必更新代码,但在 SSIS 中实现起来会很复杂,我猜您不会经常添加商店让努力变得有价值。

    【讨论】:

    • 感谢您的提示。这听起来很合理,也很容易实现。
    【解决方案2】:

    你可以使用 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/

    【讨论】:

    • 太棒了!这正是我所需要的。非常感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多