2016-07-24 11 views
1

Ich habe eine Tabelle wie folgt aus:Wie kann ich Zeilenwerte in Spalten kopieren?

Service_order  Part_code1 Part_code2  Part_code3  Part_code4  Part_code5 

    4182864919 GH82-11218A GH96-09406A  GH81-13594A GH02-11552A  GH02-11553A 
    4182868153 GH97-17670B    
    4182929636 GH97-17260C GH02-10203A   
    4182953067 GH97-17940C    
    4182954688 GH82-10555A GH97-17852A  GH81-13071A  
    4182955036 GH97-17940C    

Aber ich will es in einer neuen Tabelle zeigen, wie folgt aus:

Service_order  partCodes 
    4182864919  GH82-11218A 
    4182864919  GH96-09406A 
    4182864919  GH96-09406A 
    4182864919  GH02-11552A 
    4182864919  GH02-11553A 
    4182868153  GH97-17670B 
    4182929636  GH97-17260C 
    4182929636  GH02-10203A 
. 
. 
.and so on... 

ich mich anmelde und Union versucht, aber es hat mich nicht das Ergebnis geben dass ich wollte. Was soll ich für dieses Problem tun?

+0

Dies könnte ein schlechtes Datenbankschema sein. Bitte lesen Sie mehr über die Normalisierung der Datenbank: https://en.wikipedia.org/wiki/Database_normalization –

+0

Welche Datenbank benutzen Sie? Bitte passend etikettieren. –

Antwort

2

In SQL Server, eine einfache Möglichkeit, Entpivotisierung verwendet APPLY:

select t.service_order, v.part_code 
from t cross apply 
    (values(Part_code1), (Part_code2), (Part_code3), (Part_code4), (Part_code5) 
    ) v(part_code) 
where v.part_code is not null; 

In entweder MySQL oder SQL Server, können Sie union all verwenden:

select t.service_order, part_code1 as part_code from t where part_code1 is not null union all 
select t.service_order, part_code2 as part_code from t where part_code2 is not null union all 
select t.service_order, part_code3 as part_code from t where part_code3 is not null union all 
select t.service_order, part_code4 as part_code from t where part_code4 is not null union all 
select t.service_order, part_code5 as part_code from t where part_code5 is not null; 
+0

Wenn wir aus zwei Tabellen auswählen, sollten wir nicht auch die andere Tabelle verbinden? – erfan

+1

@erfan. . . Deine Frage erwähnt nur eine Tabelle, ganz explizit. Wenn Sie mehrere Tabellen haben, sollten Sie eine andere Frage stellen. Wenn Sie "cross apply" nicht verstehen, dann ist ein guter Anfang die Dokumentation: https://technet.microsoft.com/en-us/library/ms175156(v=sql.105).aspx. –

+0

Wenn Sie Ihren eigenen Code "t.service_order, v.part_code" anzeigen lassen können, gibt es eine T-Tabelle, in der Sie den Serviceauftrag und die V-Tabelle auswählen, für die Sie den Artikelcode ausgewählt haben. Ich rede von diesen beiden. – erfan

1

Wenn ein Serviceauftrag mehrere partCodes haben , sollten Sie eine Tabelle mit zusammengesetzten Schlüsseln als Teil der Normalisierung haben. In diesem Fall wären service_order und partCodes der eindeutige Schlüssel für jede Zeile.

Mit solchen Schema alles, was Sie brauchen, ist ein SELECT * FROM [table_name], vorausgesetzt, Sie haben eine SQL-Datenbank.

Verwandte Themen