sql--一列拆分为多列
来源:互联网 发布:windows主题图片 编辑:程序博客网 时间:2024/04/29 19:28
表1 col
11*22*33
22*33*44
33*55
44
表2 col1 col2 col3
11 22 33
22 33 44
33 55 NULL
44 NULL NULL
就是要把表1转化成表2的形式,但是表1中的col ,例如11*22*33是我自己测试的,不确定有多少项组成。也可能出现 col4 col5 ...。
先谢谢各位大虾帮忙 !分不够在加!
create table 表1( col varchar(200))
insert 表1
select '11*22*33' union all select
'22*33*44' union all select
'33*55' union all select
'44'
declare @i int
declare @j int
select @i=max(len(col)-len(replace(col,'*','')))+1 from 表1
update 表1 set col=col+REPLICATE('*',@i-len(col)+len(replace(col,'*',''))-1)
declare @sql varchar(8000)
declare @sql1 varchar(8000)
set @sql='create table #t('
set @j=1
while @j<=@i
begin
set @sql=@sql+'col'+cast(@j as varchar)+' varchar(10),'
set @j=@j+1
end
set @sql=left(@sql,len(@sql)-1)+')'
set @sql=@sql+' insert #t select '''
set @sql1=''
select @sql1=@sql1+replace(col,'*',''',''')+ ''' union all select ''' from 表1
set @sql1=left(@sql1,len(@sql1)-18)+' select * from #t'
exec(@sql+@sql1)
--建立測試環境
Create Table Test(col varchar(100))
Insert Into Test(col) select '11*22*33*55*66'
Insert Into Test(col) select '22*33*44*32'
Insert Into Test(col) select '33*55'
Insert Into Test(col) select '44'
GO
--建立存儲過程
Create Procedure SP_Test
As
Begin
Declare @I Int,@J Int,@Col1 Varchar(20),@Col2 Varchar(20)
Declare @S Varchar(1000)
Set @J=1
Select @I=Max(Len(col)-Len(Replace(col,'*','')))+1 From Test
Set @S=''
While @J<=@I
Begin
Set @S=@S+'Alter Table TEST Add Col'+Rtrim(@J)+' Varchar(100);'
Set @J=@J+1
End
EXEC(@S)
EXEC('Update Test Set Col1=Col')
Set @J=2
While @@rowcount<>0 and @J<=@I
Begin
Select @Col1=Name From Syscolumns Where ID=OBJECT_ID('Test') and ColID=@J
Select @Col2=Name From Syscolumns Where ID=OBJECT_ID('Test') and ColID=@J+1
Set @S='Update Test Set '+@Col1+'= Left('+@col1+',Charindex(''*'','+@Col1+')-1)'
+','+@Col2+'=Stuff('+@Col1+',1,Charindex(''*'','+@Col1+'),'''')'
+' Where Charindex(''*'','+@Col1+')>0'
Set @J=@J+1
EXEC(@S)
End
End
GO
--測試
EXEC SP_Test
Select *From Test
GO
--刪除測試環境
Drop Table Test
Drop Procedure SP_Test
--結果
/*
Col Col1 Col2 Col3 Col4 Col5
11*22*33*55*66 11 22 33 55 66
22*33*44*32 22 33 44 32 NULL
33*55 33 55 NULL NULL NULL
44 44 NULL NULL NULL NULL
- sql--一列拆分为多列
- 一列拆分为多列
- 一列拆分为多列
- excel一列数据拆分为两列
- 一列转多行--拆分列值
- 数据库函数 分割一列为多列
- oracle ebs 拆分一列为多行的问题
- sql 多行转换为一行(STUFF及PIVOT的用法) ||SQL 合并列值和拆分列值
- SQL:列的拆分
- Oracle 多列合并为一列,字符串连接
- 特殊sql【一】(例:多列合并成一列)
- SQL将一行多列数据合并成 一列
- sql sever中如何将一列修改为自增长列
- sql:当一列为空时取另一列(case when then)
- 合并列值-合并为一列
- 更改一列为自增列
- execl合并两列数据为一列
- Kettle6列拆分为多行步骤详解
- 《Windows.Presentation.Foundation.Professional.Programming》翻译--目录
- 自动填写表单、邮箱自动申请、网站注册
- Delphi控件安装
- 和matlab开发应用有关的网址http://www.codeproject.com/dotnet/matlabeng.asp
- WAP联盟统计数据定时任务的实现
- sql--一列拆分为多列
- MySQL更改root密码
- JSP Session的用法
- 利用Jmail.Message发送邮件(带身份验证,注释详细)
- Delphi处理表单实例
- [JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)
- 简单的JSP用户登陆页面
- AjaxPro框架使用整理(三) AjaxServerCache特性
- UrlRewriter for .net2.0