一列拆分为多列

转载 2006年05月27日 15:03:00

表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

 

MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示

本文欢迎转载,转载请注明出处,谢谢~(作者:喝酒不骑马 Colton_Null) from CSDN最近的项目中有个需求。有关用户的地址信息是存在person_info_t表中的address字...

利用JXL根据Exel的某一列进行拆分Excel

请不要在意类名 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream...

EXCEL一列变多列.

  • 2012年03月02日 00:17
  • 7KB
  • 下载

根据两行或多列值,实时计算另一列得

easyui-datagrid 根据多列计算另一个列的值 实时计算(onChange) numberbox的复合性...

SQL将一行多列数据合并成 一列

由于最近在做项目的时候,要对数据库中一行很多列个数据进行求和,便在网上查了一下,首先要用到动态SQL语句,动态sql感觉就是类似于拼接sql字符串 动态语句基本语法 1 :普通SQL语句可以用ex...

sql 多行转多列,多行转一列合并数据,列转行

多行转多列:    要实现该功能pivot行数应该是必不可少吧,下面我就来说说该函数如何使用  局限性:该函数只能针对已知行数要转为几列才能使用,动态行转动态列不支持(个人所知,如可以实现请指教) 用...

hdu1045Fire Net (一行变多行,一列变多列,最小顶点覆盖)

Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm...

Oracle一列或多列操作(增加列、修改列、删除列)

--查看表结构属性 SQL> desc emp; Name Type      Nullable Default Comments  -------- ------------ -------- --...

SQL中如何根据分隔符将表字段中一列转多列

如何将表字段一列转多列呢!可以用PARSENAME函数拆分字符串,但是Parsename函数上限只能处理4列,多列该怎么处理呢? 比如表字段A: a1,b2,c3,d4,e5,转换成多列呢!...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一列拆分为多列
举报原因:
原因补充:

(最多只允许输入30个字)