Maison > base de données > tutoriel mysql > Comment puis-je diviser une seule colonne de numéros d'abonnement en plusieurs colonnes dans SQL ?

Comment puis-je diviser une seule colonne de numéros d'abonnement en plusieurs colonnes dans SQL ?

Barbara Streisand
Libérer: 2024-12-25 20:39:14
original
642 Les gens l'ont consulté

How Can I Split a Single Column of Subscription Numbers into Multiple Columns in SQL?

Décomposer une seule colonne en plusieurs colonnes

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 :

Étape 1 : Transformer le numéro d'abonnement en une structure XML

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§§')
Copier après la connexion

Le nombre transformé devient :

<x>SC-5-1395-174-25P</x>
Copier après la connexion

Étape 2 : Extraire les valeurs de la structure XML

À 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)')))
Copier après la connexion

Étape 3 : Attribution des valeurs extraites aux nouvelles colonnes

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal