Heim >Datenbank >MySQL-Tutorial >Wie teile ich die Daten einer Spalte mithilfe von SQL in mehrere Zeilen auf?
SQL-Abfrage zum Aufteilen von Spaltendaten in Zeilen
Um Spaltendaten in Zeilen zu unterteilen, besteht ein gängiger Ansatz darin, eine Aufteilungsfunktion zu erstellen. Hier ist eine Beispielfunktion für diesen Zweck:
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;
Um diese Funktion in einer Abfrage zu verwenden, verwenden Sie eine äußere Anwendung, um die vorhandene Tabelle zu verknüpfen:
select t1.code, s.items declaration from yourtable t1 outer apply dbo.split(t1.declaration, ',') s
Dies führt zum gewünschten Ergebnis , Spaltendaten in Zeilen aufteilen:
| CODE | DECLARATION | ----------------------- | 123 | a1-2 nos | | 123 | a2- 230 nos | | 123 | a3 - 5nos |
Alternativ kann eine CTE-Version implementiert werden als folgt:
;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 teile ich die Daten einer Spalte mithilfe von SQL in mehrere Zeilen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!