2016-08-02 23 views
0

Seit einiger Zeit verwenden wir Excel-Dateien, um unsere Kaufdaten zu speichern. Diese Tabellenkalkulationsdatei hat eine einheitliche Struktur. Da es ziemlich viele Attribute hat, werde ich nur die wichtigsten nennen.SSIS - Durchschleifen von Spalten

In diesen Excel-Dateien haben wir Spalten für die Produkt-ID, die Größen jedes Produkts und die Mengen für jede Zusammensetzung von Produkt-ID und Größe.

Das Problem ist, dass wir mehrere Geschäfte haben und jeder von ihnen unterschiedliche Mengen pro Produkt erhalten hat. Also, in jedem Excel, haben wir eine Spalte für jedes Geschäft, in dem wir die bestellten Mengen aus jedem Composite platzieren.

enter image description here

Also, was ich will, ist, durch die Spalten jeder Speicher Schleife tun, um die entsprechenden Mengen der einzelnen Verbund auf den spezifischen Speicher hinzuzufügen.

Zum Beispiel

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

und dann für jede Spalte wiederholen.

Ich habe versucht, eine Lösung dafür zu finden, aber habe es noch nicht herausgefunden. Ich würde wirklich alle Hilfe oder Tipps zu schätzen wissen.

Antwort

0

können Sie Entpivotisierung Komponente verwenden

Die Spalten die Spalten, die Sie in Zeilen umwandeln müssen überprüft werden. Die Zielspalte ist die Spalte, in die Sie die Daten eingeben. Pivot-Schlüsselwert Spaltenname: Name der Pivot-Spalten.

enter image description here

enter image description here

Danach können Sie in der Regel die Zeilen einfügen gerade.

Eine andere Möglichkeit, es zu tun, ist zwar SQL, ich benutze T-SQL hier, aber andere Datenbank sollte etwas ähnliches haben. Importieren Sie zuerst Ihre Rohdaten in eine Tabelle. Verwenden Sie dann Unpivot, um etwas Ähnliches wie oben zu tun.

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; 

Das einzige Problem bei diesem Ansatz ist, dass es nicht behandelt werden kann, wenn mehr Spalte (Speicher) hinzugefügt wird. Aber Sie können es dynamisch machen: https://www.mssqltips.com/sqlservertip/3002/use-sql-servers-unpivot-operator-to-dynamically-normalize-output/

+0

Ausgezeichnet! Das war genau das, was ich brauchte. Vielen Dank für Ihre Zeit. –

1

Vermeiden Sie es, in SSIS einen komplexen, dynamischen Schleifencode zu erstellen.

Es wäre viel einfacher, den Fluss zu teilen, so dass Sie die product_id, size_id und Daten für einen Speicher haben. Führen Sie Ihre Einfügung für jedes Geschäft unter Verwendung seiner store_id, die Sie bereits kennen.

Obwohl eine Looping-Lösung gut klingt, kann es sein, dass Sie Ihren Code nicht aktualisieren müssen, wenn Sie einen neuen Store hinzufügen, aber in SSIS ist es komplex zu implementieren, und ich nehme an, dass Sie keine Stores hinzufügen häufig, um die Anstrengung lohnend zu machen.

+0

Danke für den Tipp. Das klingt sehr plausibel und einfach zu implementieren. –