表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 方法歸納 使用 直接將多列合...