Bei diesem Problem geht es um die Manipulation von Daten in einer Tabellenspalte, um zusätzliche Spalten zu erstellen. Die ursprüngliche Spalte speichert Abonnementnummern in einem einzigen Wert. Unsere Aufgabe besteht darin, die verschiedenen Teile dieser Abonnementnummern zu extrahieren und sie auf mehrere Spalten zu verteilen.
Ein kreativer Ansatz besteht darin, eine Kombination aus String-Manipulation und XML-Verarbeitung zu verwenden. So funktioniert es:
Wir ersetzen alle Leerzeichen in der Abonnementnummer durch Bindestriche und verwenden dann die Funktion replace(), um die Bindestriche umzuwandeln zu einem speziellen Trennzeichen, sagen wir §§Split§§. Dadurch können wir die transformierte Zahl als XML-Struktur anzeigen.
replace(replace(subscription_number, ' ', '-'), '-', '§§Split§§')
Die transformierte Zahl wird zu:
<x>SC-5-1395-174-25P</x>
Mit der Funktion Cast() verpacken wir die transformierte Zahl in XML-Tags und extrahieren dann einzelne Teile mit der Funktion xDim.value(). Um beispielsweise den ersten Teil (SC) zu erhalten, verwenden wir:
ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
Wir verwenden eine Kreuzanwendung, um die extrahierten Werte zuzuweisen die neuen Spalten in unserem Ergebnissatz. Hier ist ein Beispiel:
Select A.subscription_number, B.Pos1 as Col1, B.Pos2 as Col2, B.Pos3 as Col3, B.Pos4 as Col4, B.Pos5 as Col5, B.Pos6 as Col6, B.Pos7 as Col7 From table A Cross Apply ( Select Pos1 = ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)'))) , Pos2 = ltrim(rtrim(xDim.value('/x[2]', 'varchar(max)'))) , Pos3 = ltrim(rtrim(xDim.value('/x[3]', 'varchar(max)'))) , Pos4 = ltrim(rtrim(xDim.value('/x[4]', 'varchar(max)'))) , Pos5 = ltrim(rtrim(xDim.value('/x[5]', 'varchar(max)'))) , Pos6 = ltrim(rtrim(xDim.value('/x[6]', 'varchar(max)'))) , Pos7 = ltrim(rtrim(xDim.value('/x[7]', 'varchar(max)'))) From ( Select Cast('<x>' + replace((Select replace(replace(A.subscription_number, ' ', '-'), '-', '§§Split§§') as [*] For XML Path('')), '§§Split§§', '</x><x>') + '</x>' as xml) as xDim ) as A ) B
Dieser Ansatz ermöglicht es uns, einen einzelnen Spaltenwert elegant in mehrere neue Spalten aufzuteilen und so eine saubere und strukturierte Möglichkeit zum Speichern und Zugreifen auf Daten bereitzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine einzelne Spalte mit Abonnementnummern in SQL in mehrere Spalten aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!