MSSQL Datenkonvertierung 1 Zeile auf mehrere Zeilen - bitte um Tips
Hallo zusammen,
ich bräuchte mal Hilfe bei einer Datenübernahme in ein neues Format.
Aus historischen Gründen gibt es eine Tabelle mit einem Primärschlüssel über 3 Felder (Kunden-ID-, Lieferanten-ID, Jahr) in welcher in jedem Datensatz in einzelnen Feldern 12 Monatswerte (Umsatz in Währung) stehen. Ist nicht so toll auszuwerten, daher habe ich jetzt ein neues Format auf monatlicher Basis erarbeitet, bei dem der Primärschlüssel um Feld 4 (Monat) erweitert wird und jeweils nur der Monatsumsatz geschrieben wird. Zuätzlich werden noch weitere Felder übernommen bzw. neu dazugefügt, aber das ist nicht das eigentliche Thema.
Nun müssen rund 300.00 bestehende Datensätze übernommen werden.
Prinzipiell sollte das doch mit einr Art FOR-Schleife gemacht werden, oder? Die 12 Umsatzfelder einzeln durchgehen und jeweils einen neuen Datensatz schreiben - prinzipiell.
Habe ich in Transact-SQL noch nie gemacht - und um ehrlich zu sein, weiß ich noch nicht mal, wie ich das suchmaschinentechnisch in Deutsch und erst recht nicht in Englisch formulieren soll.
Gibt es Tips oder Links zu sowas?
Danke im Voraus,
Haimo
ich bräuchte mal Hilfe bei einer Datenübernahme in ein neues Format.
Aus historischen Gründen gibt es eine Tabelle mit einem Primärschlüssel über 3 Felder (Kunden-ID-, Lieferanten-ID, Jahr) in welcher in jedem Datensatz in einzelnen Feldern 12 Monatswerte (Umsatz in Währung) stehen. Ist nicht so toll auszuwerten, daher habe ich jetzt ein neues Format auf monatlicher Basis erarbeitet, bei dem der Primärschlüssel um Feld 4 (Monat) erweitert wird und jeweils nur der Monatsumsatz geschrieben wird. Zuätzlich werden noch weitere Felder übernommen bzw. neu dazugefügt, aber das ist nicht das eigentliche Thema.
Nun müssen rund 300.00 bestehende Datensätze übernommen werden.
Prinzipiell sollte das doch mit einr Art FOR-Schleife gemacht werden, oder? Die 12 Umsatzfelder einzeln durchgehen und jeweils einen neuen Datensatz schreiben - prinzipiell.
Habe ich in Transact-SQL noch nie gemacht - und um ehrlich zu sein, weiß ich noch nicht mal, wie ich das suchmaschinentechnisch in Deutsch und erst recht nicht in Englisch formulieren soll.
Gibt es Tips oder Links zu sowas?
Danke im Voraus,
Haimo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 332456
Url: https://administrator.de/forum/mssql-datenkonvertierung-1-zeile-auf-mehrere-zeilen-bitte-um-tips-332456.html
Ausgedruckt am: 26.12.2024 um 20:12 Uhr
4 Kommentare
Neuester Kommentar
Hallo Haimo und Slainte,
geht noch einfacher mit einem Befehl und union:
Deine Umsatzspalten habe habe ich mal als Umsatz_01 bis Umsatz_12 bezeichnet, die Monate werden statisch reingeschrieben.
Wenn Du sowas öfter verwenden wolltest, z.B. in einer Sicht, dann würde ich Dir empfehlen, in der Hilfe nach "unpivot" zu schauen, das ist schneller in der Abarbeitung und ist genau dafür gedacht.
Gruß, Mad Max
geht noch einfacher mit einem Befehl und union:
insert into <neue Tabelle> ([Kunden-ID], [Lieferanten-ID], Jahr, Monat, Umsatz, <andere Spalten>)
select [Kunden-ID], [Lieferanten-ID], Jahr, 1, Umsatz_01, <andere Spalten> from <alte Tabelle>
union
select [Kunden-ID], [Lieferanten-ID], Jahr, 2, Umsatz_02, <andere Spalten> from <alte Tabelle>
union
...
union
select [Kunden-ID], [Lieferanten-ID], Jahr, 12, Umsatz_12, <andere Spalten> from <alte Tabelle>
Deine Umsatzspalten habe habe ich mal als Umsatz_01 bis Umsatz_12 bezeichnet, die Monate werden statisch reingeschrieben.
Wenn Du sowas öfter verwenden wolltest, z.B. in einer Sicht, dann würde ich Dir empfehlen, in der Hilfe nach "unpivot" zu schauen, das ist schneller in der Abarbeitung und ist genau dafür gedacht.
Gruß, Mad Max
Du brauchst weder eine FOR-Schleife noch einen CURSOR sondern kannst das total simpel machen:
Schleifen sind echt nur eine Notlösung und verursachen meist mehr Probleme als sie lösen.
INSERT INTO tabelle_neu(KundenID, Lieferanten-ID, Jahr,Monat,Umsatz)
SELECT KundenID, Lieferanten-ID, Jahr,'01' AS Monat,Umsatz_Januar AS Umsatz
FROM tabelle_alt
UNION ALL
SELECT KundenID, Lieferanten-ID, Jahr,'02',Umsatz_Februar
FROM tabelle_alt
UNION ALL
SELECT KundenID, Lieferanten-ID, Jahr,'03',Umsatz_Maerz
FROM tabelle_alt
[...]