作业帮 > 综合 > 作业

ms_sql数据库按符号拆分成多列和多行 例:列1,列2 1 22,33 2 44,55,66 拆分为 1 22 1 3

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/09/14 09:33:55
ms_sql数据库按符号拆分成多列和多行 例:列1,列2 1 22,33 2 44,55,66 拆分为 1 22 1 33 2 44 2 55
例:列1,列2
1 22,33
2 44,55,66
拆分为
1 22
1 33
2 44
2 55
2 66
试一下 列转行 或者 用存储过程采用临时表 方式
再问: 我sql基础不行,能不能给我写个存储过程,详细点
再答: 你这个存储过程有点多 我要写一会儿 等哈发上来
再问: 好的,谢谢!
再答: 你直接在查询分析器 里面运行下面代码就是那 如果ok 记得采纳哦!!! IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_SplitStr2]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT')) DROP FUNCTION [dbo].[fn_SplitStr2] GO CREATE Function [dbo].[fn_SplitStr2] ( @SourceSql varchar(8000) ,@StrSeprate varchar(20) ) RETURNS @temp table(F1 varchar(100)) AS BEGIN DECLARE @ch varchar(100) SET @SourceSql=@SourceSql+@StrSeprate WHILE(@SourceSql'') BEGIN SET @ch=left(@SourceSql,charindex(@StrSeprate,@SourceSql,1)-1) INSERT @temp VALUES(@ch) SET @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),'') END RETURN END declare @t table ( ID int, Contetnt varchar(500) ) declare @t1 table( ID int, Contetnt varchar(100) ) insert @t select 1,'22,33' union select 2,'44,55,66' while exists(select top 1 ID from @t) begin insert @t1(ID,Contetnt) select(select top 1 ID from @t) as ID , F1 from [dbo].[fn_SplitStr2]((select top 1 [Contetnt] from @t),',') delete @t where ID = (select top 1 ID from @t) end select * from @t1