2017-11-18 2 views
1

Ich habe derzeit ein paar Unpivot-Abfragen, die jeweils etwa 2000 Zeilen erstellt. Ich muss die Ergebnisse dieser Damen nehmen und eine neue Tabelle einfügen, die auf einen Schlüssel passt.Import Unpivot Ergebnisse in neue Tabelle und Match auf Key

Abfrage Beispiel:

Select DeviceSlot 
    FROM tbl1 
    unpivot(
    DeviceSlot 
    For col in(
     col1, 
     col2, 
     col3, 
) 
)AS Unpivot 

Jetzt muss ich aus der Abfrage die Ergebnisse übereinstimmen, und es in eine neue Tabelle mit etwa 20.000 Zeilen einfügen. Pseudo-Code für diesen:

Insert Into tbl2(DeviceSlot) 
    Select DeviceSlot 
    FROM tbl1 
    unpivot(
    DeviceSlot 
    For col in(
     col1, 
     col2, 
     col3 
) 
)AS Unpivot2 
    Where tbl1.key = tbl2.key 

Ich habe ziemlich verwirrt gewesen, wie dies zu tun, und ich entschuldige mich, wenn es nicht klar ist. Ich habe auch eine andere Unpivot-Abfrage, die dasselbe für verschiedene Spalten tut.

Antwort

0

Nicht sicher, wonach Sie fragen. Während das Unpivoting zum "Normalisieren" von Daten typischerweise der gewünschte "Schlüssel" während des Unpivots abgeleitet wird, wird zum Beispiel unter der ID-Spalte der Originaltabelle in den nicht geschwenkten Daten wiederholt, um einen Fremdschlüssel für eine neue Tabelle darzustellen.

SQL Fiddle

MS SQL Server 2014-Schema-Setup:

CREATE TABLE Table1 
    ([id] int, [col1] varchar(2), [col2] varchar(2), [col3] varchar(2)) 
; 

INSERT INTO Table1 
    ([id], [col1], [col2], [col3]) 
VALUES 
    (1, 'a', 'b', 'c'), 
    (2, 'aa', 'bb', 'cc') 
; 

Abfrage 1:

select id as table1_fk, colheading, colvalue 
from (
    select * from table1 
) t 
unpivot (
    colvalue for colheading in (col1, col2, col3) 
    ) u 

Results:

| table1_fk | colheading | colvalue | 
|-----------|------------|----------| 
|   1 |  col1 |  a | 
|   1 |  col2 |  b | 
|   1 |  col3 |  c | 
|   2 |  col1 |  aa | 
|   2 |  col2 |  bb | 
|   2 |  col3 |  cc |