Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine einzelne Spalte mit mehreren Abonnementnummern in SQL in einzelne Spalten aufteilen?
Abonnementnummern in mehrere Spalten aufteilen
In einer Situation, in der eine einzelne Spalte mehrere Werte enthält, z. B. eine Abonnementnummer, werden diese Werte aufgeteilt in einzelne Spalten kann eine nützliche Technik zur Datenmanipulation sein. Hier ist eine Schritt-für-Schritt-Anleitung:
1. Cross Apply XML Fragmentation:
Dieser Ansatz nutzt XML-Fragmentierung, um die Abonnementnummer in ein XML-Dokument umzuwandeln, sodass einzelne Werte als separate Knoten extrahiert werden können.
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.SomeCol,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A ) B
Hier: xDim ist das Fragmentierungselement, das die Zeichenfolge der Abonnementnummer in XML konvertiert. Die resultierenden Knoten, nummeriert als x[1], x[2] usw., werden in die Zielspalten extrahiert.
2. Tabelle im laufenden Betrieb erstellen:
Alternativ können Sie die Zieltabelle dynamisch während der Abfrageausführung erstellen. Dadurch entfällt die Notwendigkeit einer expliziten Anweisung zur Tabellenerstellung im Voraus.
Select A.PUB_FORM_NUM ,B.* Into MyNewPubTable From @YourTable 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.PUB_FORM_NUM,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A ) B
Dieser Ansatz erstellt die MyNewPubTable und fügt die aufgeteilten Abonnementnummernwerte direkt in die Zielspalten ein.
Das obige ist der detaillierte Inhalt vonWie kann ich eine einzelne Spalte mit mehreren Abonnementnummern in SQL in einzelne Spalten aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!