sql 一列拆分為多列

2021-04-13 04:35:51 字數 2724 閱讀 2241

表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<

=@ibegin

set @sql=@sql+'col'+cast(@j as varchar)+' varchar(10),'

set @j=@j+1

endset @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

asbegin

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<

=@ibegin

set @s=@s+'alter table test add col'+rtrim(@j)+' varchar(100);'

set @j=@j+1

endexec(@s)

exec('update test set col1=col')

set @j=2

while @@rowcount<>0 and @j<

=@ibegin

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)

endend

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  

一列拆分為多列

表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是我自己測試的,不確定有多少項組成。也可能出...

Pandas 一列拆分為多列

假設dataframe中有一列資料為如下形式 需要將year unit deposit pro這一列的資料按照指定分隔符 拆分為12列,並拼接到原始資料中生成新的dataframe。方法如下 資料拆分 拼接 new names gjj pro str x 1 for x in range 12 為新...

dataframe一列拆分成多列 split

假設某一列資料報含多個資訊或乙個字串 id attrs a 1,2,5,3 b 3,1,2,5 c 1,2,0,3 d 1,7,5,3 e 2,1,6,8 我們想把他拆分成多列,做法如下 首先進行拆分 data df data df attrs str.split expand true 然後用pd...