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!