2016-08-02 2 views
0

しばらくの間、私たちは購入データを保存するためにExcelファイルを使用してきました。このスプレッドシートファイルは、一様な構造をしています。それは非常に多くの属性を持っているので、私は最も重要なものに名前を付けるつもりです。SSIS - ループスルー列

このExcelファイルには、製品ID、各製品のサイズ、および製品IDとサイズの各組み合わせの数量の列があります。

問題は、複数の店舗があり、それぞれに1つの商品ごとに異なる数量の商品が届いたことです。したがって、それぞれのExcelでは、各コンポジットから注文された数量を各店舗ごとに配置した列があります。

enter image description here

だから、私は何をしたい特定のストアに各複合の対応する量を追加するために、各店舗の列をループしています。例えば

、次いで

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

と、列毎に繰り返します。

私はこれのための解決策を見つけようとしていますが、まだそれを把握していません。私は本当にすべてのヘルプやヒントを感謝します。

答えて

0

あなたがチェック

列はあなたが列に変換するために必要な列となりますアンピボットコンポーネントを使用することができます。 Destination列は、データを格納する列です。ピボット・キー値の列名:ピボット列の名前。その後

enter image description here

enter image description here

、あなただけの通常の行を挿入することができます。

もう1つの方法はsqlですが、ここではt-sqlを使用していますが、他のデータベースには同様のものが必要です。まず、生データを表にインポートします。その後、ピリオドを使用して上記と同様のことを行います。

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/

+0

優秀!それはまさに私が必要としたものでした。あなたのお時間をありがとうございました。 –

1

複雑で動的なループコードをSSISで作成しないでください。

フローを分割すると、product_id,size_id、1つのストアのデータが分かりやすくなります。既に知っているstore_idを使用して、各店舗に挿入します。

新しいソリューションを追加するときにループソリューションがうまくいくと思いますが、SSISでは実装するのが複雑になります。努力をする価値がある。

+0

チップのおかげで。それは非常にもっともらしくて実装が簡単です。 –