Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Data Lajur kepada Berbilang Baris Menggunakan SQL?
Pertanyaan SQL untuk Memisahkan Data Lajur kepada Baris
Untuk mengasingkan data lajur kepada baris, pendekatan biasa ialah mencipta fungsi pisah. Berikut ialah contoh fungsi untuk tujuan ini:
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;
Untuk menggunakan fungsi ini dalam pertanyaan, gunakan aplikasi luar untuk menyertai jadual sedia ada:
select t1.code, s.items declaration from yourtable t1 outer apply dbo.split(t1.declaration, ',') s
Ini akan menghasilkan hasil yang diingini , memisahkan data lajur kepada baris:
| CODE | DECLARATION | ----------------------- | 123 | a1-2 nos | | 123 | a2- 230 nos | | 123 | a3 - 5nos |
Sebagai alternatif, versi CTE boleh dilaksanakan sebagai berikut:
;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
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Data Lajur kepada Berbilang Baris Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!