2017-10-04 1 views
0

Ich habe eine Tabelle wie diese, ich verwende code1 und code2 als Primärschlüssel.Verwenden von Pivot in SQL mit zwei Spalten als Primärschlüssel

Code1 Code2 Data1 Data2 Data3 
11  0  a  b  7 
11  1  b  b  6 
12  2  z  v  5 

Ich möchte die Tabelle in das verwandeln:

Code1 Code2 TheData (create id ?) 
11  0  a   0 
11  0  b   1 
11  0  7   2 
11  1  b   0 
11  1  b   1 
11  1  6   2 
12  2  z   0 
12  2  v   1 
12  2  5   2 

Ich dachte über eine ID hinzugefügt, weil ich die Informationen bin zu verlieren, welche Daten ich eingefügt habe.

Später in der SQI werde ich die ID verwenden, um die guten Daten abzurufen, aber es ist nicht die Frage hier. Die Anzahl der Spalten in 'temp' ist statisch, so dass ich beliebig schwenken kann.

+0

Was ist mit 1 passiert? – Strawberry

+0

Ich vergesse es, Bearbeitung sofort! –

Antwort

0

Mit einem UNPIVOT ist sauberer und effizienter, stellen Sie sicher, dass der Wert im Spaltenformat umgewandelt wird.

SELECT Code1, Code2, Value, Idname 
FROM 
(SELECT Code1, Code2, 
CAST (Data1 AS varchar) AS Data1, 
    CAST (Data2 AS varchar) AS Data2, CAST (Data3 AS varchar) AS Data3 
FROM @table 
) temp 
UNPIVOT 
(
Value FOR Idname IN (Data1, 
    Data2, Data3) 
) as Result 
+0

'UNPIVOT' ist keine MySQL-Operation. –

+0

Entschuldigung, ich habe die automatisierten Tags nicht überprüft –

3

können Sie union all verwenden:

select code1, code2, data1 as thedata, 0 as new_id from temp 
union all 
select code1, code2, data2 as thedata, 1 from temp 
union all 
select code1, code2, data3 as thedata, 2 from temp; 

Wenn Sie tatsächlich die Ergebnisse in der von Ihnen angegebenen Reihenfolge möchten, order by 1, 2, 4 verwenden.

+0

Danke, ich sehe was du getan hast. Ich werde das versuchen, aber nicht mit Pivot wäre effizienter gewesen? Ich habe nie Pivot benutzt und wollte es diesmal benutzen. –

+1

@ Benoît Es gibt keine solche Sache. – Strawberry

+0

Oh, ok. Das liegt daran, dass meine temporäre Tabelle die 'Geschichte n-1' eines anderen ist, die die neuesten Werte enthält. Ich brauche danach die Zeilen von n-1 in Tabelle n einzufügen. Ich dachte, PIVOT hätte geholfen, aber ich denke, du hast Recht. Danke –