Konvertieren Multi-Spalten zu Zeilen
Ich habe ein legacy-Tabelle mit den folgenden Spalten.
Create Table test
( id varchar(50)
, code1 varchar(50)
, codeDesc1 varchar(50)
, code2 varchar(50)
, codeDesc2 varchar(50)
, code3 varchar(50)
, codeDesc3 varchar(50)
, code4 varchar(50)
, codeDesc4 varchar(50)
, code5 varchar(50)
, codeDesc5 varchar(50)
, code6 varchar(50)
, codeDesc6 varchar(50)
)
insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6)
values ('1','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code')
insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6)
values ('2','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code')
select * from test
gibt, wie folgenden:
id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6
1,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code
2,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code
Aber ich möchte die Daten zurück, wie unten dargestellt:
ID, Code, Description
1, 100.1, First Code
1, 100.2, Second Code
1, 100.3, Third Code
1, 100.4, Fourth Code
1, 100.5, Fifth Code
1, 100.6, Sixth Code
2, 100.1, First Code
2, 100.2, Second Code
2, 100.3, Third Code
2, 100.4, Fourth Code
2, 100.5, Fifth Code
2, 100.6, Sixth Code
Kann mir jemand helfen, wie zu tun, bitte?
Habe ich versucht die UNPIVOT aber hat mir nicht die genauen Ergebnisse, die ich suchte. Hier ist die Abfrage, die ich verwendet, aber Sie muss optimiert werden, um die genaue Ergebnis, wo ich bin finden der schwierigen Zeit.
SELECT Id, FieldCode , FieldValue
FROM
(
SELECT id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6
FROM test
) MyTable
UNPIVOT
(FieldValue FOR FieldCode IN (code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6))AS MyUnPivot
Danke für Eure Hilfe im Voraus.
- Was ist das ? SQL oder ähnliches ? Kennzeichnen Sie bitte entsprechend
- Wollen Sie DB, um eine Ausgabe ähnlich, oder wollen Sie einige Programmier-Sprache zu drucken wie?
- Vielen Dank für Ihre Antwort. Ja, ich brauche die Abfrage zu tun, die transformation, da habe ich zu nehmen Sie diese Informationen und update einer anderen Tabelle. Ich weiß, ich könnte verwenden von Cursorn, aber ich weiß nicht, wie Cursor und ich weiß, es ist ein Weg, es zu tun mit PIVOT/UNPIVOT-Befehle, aber etwas fehlt und ich sehe es nicht.
- Da ich keine Antwort auf meine eigene Frage jetzt, hier ist die Auflösung:
Du musst angemeldet sein, um einen Kommentar abzugeben.
Niemals Geist, finden Sie die Antwort. Dank dieser wunderbaren Mangal website http://mangalpardeshi.blogspot.com/2009/04/unpivot-multiple-columns.html
Und hier ist meine Abfrage, die gelöst mein problem: ich hier veröffentlichen, so dass, wenn wer schaut
Nun der trick Teil das richtige Ergebnis zu erhalten ist zurück in der WHERE-Klausel am Ende, das hängt von der Spalte Namen, die Sie verwendet. Also, versuchen Sie, um den code zu verstehen, bevor Sie versuchen, mit ihm zu spielen.
Außerdem ist es eine gute Idee zu überprüfen, für die ISNULL-in der ersten Abfrage aus, die Sie zurückgeben, die orginal Spalten. Weil, sobald Sie in der UNPIVOT-Modus, die Sie nicht haben, eine änderung zu prüfen, und es kann casue ein Fehler.
Glück!