Maison > base de données > tutoriel mysql > Comment transformer des données de colonnes séparées par des virgules en lignes distinctes dans SQL ?

Comment transformer des données de colonnes séparées par des virgules en lignes distinctes dans SQL ?

Patricia Arquette
Libérer: 2025-01-05 10:31:49
original
651 Les gens l'ont consulté

How to Transform Comma-Separated Column Data into Distinct Rows in SQL?

Extraction de données de ligne à partir de données de colonne fractionnées dans SQL

Pour diviser les données de colonne en lignes distinctes, vous pouvez exploiter une fonction personnalisée et l'appliquer à votre table existante à l'aide d'une jointure externe. Cela vous permet de transformer des données comme ceci :

Code  Declaration
123   a1-2 nos, a2- 230 nos, a3 - 5nos
Copier après la connexion

Dans le format souhaité :

Code  Declaration 
123   a1 - 2nos 
123   a2 - 230nos 
123   a3 - 5nos
Copier après la connexion

Utilisation d'une fonction de fractionnement

Créer un fonction de partage appelée [dbo].[Split] pour séparer les données à l'aide d'un ',' délimiteur :

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX))       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return 
end;
Copier après la connexion

Application de la fonction Split

Utilisez la fonction split dans une requête pour joindre la nouvelle table à l'original :

select t1.code, s.items declaration
from yourtable t1
outer apply dbo.split(t1.declaration, ',') s
Copier après la connexion

Cela produira le résultat souhaité.

À l'aide d'un CTE

Alternativement, vous pouvez implémenter une version CTE (Common Table Expression) :

;with cte (code, DeclarationItem, Declaration) as
(
  select Code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
         stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from yourtable
  union all
  select code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
    stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from cte
  where Declaration > ''
) 
select code, DeclarationItem
from cte
Copier après la connexion

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