Heim >Datenbank >MySQL-Tutorial >Wie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?

Wie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-05 10:06:451035Durchsuche

How to Transform Comma-Separated Values in a SQL Column into Separate Rows?

SQL abfragen, um Spaltendaten in Zeilen aufzuteilen

Problem:

Sie haben eine Tabelle mit zwei Spalten, Code und Erklärung. Die Spalte „Deklaration“ enthält eine durch Kommas getrennte Werteliste. Sie müssen diese Daten in Zeilen umwandeln, wobei jede Zeile eine separate Deklaration für den entsprechenden Code darstellt.

Lösung:

Ein Ansatz zur Lösung dieses Problems besteht darin, eine zu erstellen benutzerdefinierte SQL-Funktion:

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;

Sie können diese Funktion dann in einer Abfrage nutzen, indem Sie eine äußere Anwendung verwenden, um eine Verbindung zu Ihrer vorhandenen herzustellen Tabelle:

select t1.code, s.items declaration
from yourtable t1
outer apply dbo.split(t1.declaration, ',') s

Diese Abfrage liefert das gewünschte Ergebnis:

| CODE |  DECLARATION |
-----------------------
|  123 |     a1-2 nos |
|  123 |  a2- 230 nos |
|  123 |    a3 - 5nos |

Alternativ können Sie eine CTE-Version (Common Table Expression) verwenden, die ähnlich funktioniert:

;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

Das obige ist der detaillierte Inhalt vonWie transformiere ich durch Kommas getrennte Werte in einer SQL-Spalte in separate Zeilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn