2017-10-26 3 views
1

Ich habe eine Tabelle, die dynamisch aus Excel erstellt wird und eine Probe, wie folgt aussiehtin SQL oder mit SSIS

F1  F2  F3  F4 F5 
ColA ColB ColC Week1 Week2 
1  Mango Fruit 5  6 
2  Potato Veg 4  3 
3  Grapes Fruit 4  4 

In dem obigen Beispiel F1, F2 sind die Spalten von Der Tisch. Allerdings ColA sind ColB die eigentlichen Spaltenüberschriften der Daten und Week1, Week2 ändern sich ständig

ich die oben genannten Daten müssen unten in das Format konvertiert:

ColA ColB  ColC  Week  Qty 
1  Mango Fruit  Week1  5 
1  Mango Fruit  Week2  6 
2  Potato Veg  Week1  4 
2  Potato Veg  Week2  3 
3  Grapes Fruit  Week1  4 
3  Grapes Fruit  Week2  4 

I erzeugt eine eindeutige ID für jede Zeile in meinem Staging-Tabelle und identifizierte die Header- und Datenzeilen separat. Dann habe ich versucht, in SQL und SSIS und sogar dynamischem SQL Unpivot zu verwenden. Allerdings kann ich die gewünschte Ausgabe nicht erreichen und bin festgefahren. Kann mich da draußen jemand auf eine Herangehensweise hinweisen, damit ich weitermachen kann, um eine Lösung zu implementieren?

Antwort

0

Ich habe die Verwendung eines Cursors eine gespeicherte Prozedur zu machen durch die Säulen meiner ersten Zwischenspeichertabelle iterieren und erstellt eine andere umgewandelt Tabelle. Diese Tabelle hat tatsächliche Spaltenüberschriften, die als Datenzeile in meiner früheren Zwischenspeichertabelle vorhanden waren.

Dann habe ich SQL-Unpivot verwendet, um meine Daten zu transponieren.

Dank @ Prabhat G für Ihre Analyse zu diesem Thema.

1

Unpivot sollte zumindest kein Problem sein. Versuchen Sie folgendes:

create table tbl(F1 varchar(20),F2 varchar(20),F3 varchar(20),F4 varchar(20),F5 varchar(20)) 
insert into tbl values 
('ColA','ColB','ColC','Week1','Week2'), 
('1','Mango' ,'Fruit','5','6'), 
('2','Potato' ,'Veg','4','3'), 
('3','Grapes' ,'Fruit','4','4') 


SELECT F1 as ColA, F2 as ColB, F3 as ColC,week_no, quantity 
FROM 
    (SELECT F1, F2, F3, F4, F5 
    FROM tbl) iq 
    UNPIVOT 
    (quantity FOR Week_no IN(F4, F5) 
    ) As wk1 
WHERE F1 not in ('ColA') //to filter out header 

Ausgang:

ColA ColB  ColC  week_no quantity 
----- ------- -------  -------- ----------- 
1  Mango  Fruit  week1  5 
1  Mango  Fruit  week2  6 
2  Potato  Veg   week1  4 
2  Potato  Veg   week2  3 
3  Grapes  Fruit  week1  4 
3  Grapes  Fruit  week2  4 
+0

Lassen Sie mich versuchen und ich werde Sie wissen lassen, wie es ging – Mekha

+0

Meine Herausforderung ist der Col ColB ColC ist eine Zeile in meiner Staging-Tabelle und Spalten nach Col C dh Woche 1, Woche2 wird dynamisch ändern, wie wir in eine neue rollen Arbeitswoche. Die tatsächlichen Spalten der Tabelle sind F1, F2, F3 .. etc – Mekha

+0

Um Header im Staging zu überspringen, schauen Sie in sisis Quellenverbindung oder oledb Quelleneigenschaften. Es ist dort. Ich werde es am Montag auch herausfinden. Es gibt eine Option zum Definieren und Überspringen von Kopfzeilen. Für dynamische Unpivot, google es einfach. Sie werden auf viele Links stoßen. Dann müssen Sie es nur basierend auf meiner obigen Antwort ändern. –