sql如何将一条内容包含空格的记录拆分成多条记录
各位大侠,请帮忙!
我有一表单:
ID CODE1 CODE2
1 AA AA BB CC
我如何写SQL语句可以把表单变成:
ID CODE1 CODE2
1 AA AA
2 AA BB
3 AA CC
谢谢各位!
[解决办法]
--> 测试数据:[数据库]
if object_id('[数据库]') is not null drop table [数据库]
create table [数据库](
[编号] int,
[字段1] varchar(8),
[字段2] varchar(11)
)
insert [数据库]
select 1,'AA
[解决办法]
BB
[解决办法]
CC','888
[解决办法]
999
[解决办法]
666' union all
select 2,'AA
[解决办法]
BB
[解决办法]
CC','111
[解决办法]
222
[解决办法]
333' union all
select 3,'AA
[解决办法]
BB
[解决办法]
CC','444
[解决办法]
555
[解决办法]
666'
with T as
(
select [编号],charindex('
[解决办法]
','
[解决办法]
'+[字段1])col1a,
charindex('
[解决办法]
',[字段1]+'
[解决办法]
')+1 col1b,
charindex('
[解决办法]
','
[解决办法]
'+[字段2]) col2a,
charindex('
[解决办法]
',[字段2]+'
[解决办法]
')+1 col2b
from [数据库]
union all
select a.编号,b.col1b,charindex('
[解决办法]
',[字段1]+'
[解决办法]
',b.col1b)+1,
b.col2b,charindex('
[解决办法]
',[字段2]+'
[解决办法]
',b.col2b)+1
from [数据库] a join T b on a.编号=b.编号
where charindex('
[解决办法]
',[字段1]+'
[解决办法]
',b.col1b)>0
or charindex('
[解决办法]
',[字段2]+'
[解决办法]
',b.col2b)>0
)
select
a.编号,[字段1]=substring(a.[字段1]+'
[解决办法]
',b.col1a,b.col1b - b.col1a - 1),
[字段2]=substring(a.[字段2]+'
[解决办法]
',b.col2a,b.col2b - b.col2a - 1) into #test
from [数据库] a join T b on a.编号=b.编号
order by 1
declare @str varchar(2000)
set @str=''
select
@str=@str+','+[字段1]+'=max(case when [字段1]='
+quotename([字段1],'''')+' then [字段2] else 0 end)'
from
#test
group by
[字段1]
exec('select 编号'+@str+' from #test group by 编号')
/*
编号AABBCC
-------------------------
1888999666
2111222333
3444555666
*/
--一个类似的例子