一列拆分為多列

2021-04-07 07:43:20 字數 2669 閱讀 1109

表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

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<=@i

begin

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<=@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)

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

sql 一列拆分為多列

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

一列資料轉多行多列

一列資料轉多行多列 方法二 插入行列公式 公式解析 row 的功能是返回引用的行號 column 的功能是返回引用的列號 indirect函式 功能 返回文字字串所指定的引用 語法規則 indirect ref text,a1 ref text 單元格引用,該引用所指向的單元格中存放有對另一單元格的...

dataframe多列合併成一列

dataframe的幾列資料合併成為一列 dataframe的幾列資料合併成為一列 1.1 方法歸納 1.2 str.cat函式詳解 1.2.1 語法格式 1.2.2 引數說明 1.2.3 核心功能 1.2.4 常見範例 dataframe的幾列資料合併成為一列 1.1 方法歸納 使用 直接將多列合...