Ce problème concerne la manipulation des données dans une colonne de tableau pour créer des colonnes supplémentaires. La colonne d'origine stocke les numéros d'abonnement dans une seule valeur. Notre tâche consiste à extraire les différentes parties de ces numéros d'abonnement et à les répartir sur plusieurs colonnes.
Une approche créative implique l'utilisation d'une combinaison de manipulation de chaînes et de gestion XML. Voici comment cela fonctionne :
Nous remplaçons tous les espaces du numéro d'abonnement par des tirets, puis utilisons la fonction replace() pour convertir les tirets à un séparateur spécial, disons §§Split§§. Cela nous permet de visualiser le nombre transformé comme une structure XML.
replace(replace(subscription_number, ' ', '-'), '-', '§§Split§§')
Le nombre transformé devient :
<x>SC-5-1395-174-25P</x>
À l'aide de la fonction Cast(), nous enveloppons le nombre transformé dans des balises XML, puis extrayons des parties individuelles à l'aide de la fonction xDim.value(). Par exemple, pour obtenir la première partie (SC), nous utilisons :
ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
Nous utilisons une application croisée pour attribuer les valeurs extraites à les nouvelles colonnes de notre jeu de résultats. Voici un exemple :
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
Cette approche nous permet de diviser élégamment une valeur de colonne unique en plusieurs nouvelles colonnes, offrant ainsi un moyen propre et structuré de stocker et d'accéder aux données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!