Maison > base de données > tutoriel mysql > Comment diviser les données d'une colonne en plusieurs lignes à l'aide de SQL ?

Comment diviser les données d'une colonne en plusieurs lignes à l'aide de SQL ?

Patricia Arquette
Libérer: 2025-01-05 04:19:39
original
661 Les gens l'ont consulté

How to Split a Column's Data into Multiple Rows Using SQL?

Requête SQL pour diviser les données de colonne en lignes

Pour séparer les données de colonne en lignes, une approche courante consiste à créer une fonction de fractionnement. Voici un exemple de fonction à cet effet :

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

Pour utiliser cette fonction dans une requête, utilisez une application externe pour joindre la table existante :

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é , en divisant les données des colonnes en lignes :

| CODE |  DECLARATION |
-----------------------
|  123 |     a1-2 nos |
|  123 |  a2- 230 nos |
|  123 |    a3 - 5nos |
Copier après la connexion

Alternativement, une version CTE peut être implémentée comme suit :

;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