请教SQLSERVER2000一行转多行
一个表Table1,有两字段
a Varchar(30), b varchar(50)
字段b 的内容可能会有以'/'作为分隔的,也可能没有分隔符标识,例
记录内容可能为:
pp pp1
kk kk 1/kk 2
hh hh 1/hh 2/hh 3/hh 4
比如说上面三行记录,现在要求转换成7行记录(就是字段B中如果有'/'则分成N+1行 (其中N为分隔符的个数)
即
pp pp1
kk kk 1
kk kk 2
hh hh 1
hh hh 2
hh hh 3
hh hh 4
请教师傅们帮忙啊。先谢谢了。
[解决办法]
等楼下写不用master..spt_values的。。
力气活 让他们写好了。
[解决办法]
--写完才看到是 2000 ,就贴个 2005 的declare @t table(a varchar(10),b varchar(20))insert into @tselect 'pp' ,'pp1' union allselect 'kk' ,'kk 1/kk 2' union allselect 'hh' ,'hh 1/hh 2/hh 3/hh 4'select a.a,b.bfrom(select a,[value] = convert(xml,'<v>' + REPLACE(b, '/', '</v><v>') + '</v>') from @t) aouter apply(select b = N.v.value('.', 'varchar(100)') from a.[value].nodes('/v') N(v)) b/*************************a b---------- ----------------------------------------------------------------pp pp1kk kk 1kk kk 2hh hh 1hh hh 2hh hh 3hh hh 4(7 行受影响)
[解决办法]
--2000declare @t table(a varchar(10),b varchar(20))insert into @tselect 'pp' ,'pp1' union allselect 'kk' ,'kk 1/kk 2' union allselect 'hh' ,'hh 1/hh 2/hh 3/hh 4'select a.a,substring(a.b,b.number,charindex('/',a.b+'/',b.number)-b.number) bfrom @t a ,master..spt_values bwhere b.[type] = 'P' and b.number between 1 and len(a.b) and substring('/'+a.b,b.number,1) = '/'/********************a b---------- --------------------pp pp1kk kk 1kk kk 2hh hh 1hh hh 2hh hh 3hh hh 4(7 行受影响)
[解决办法]
你可以自已写一个 函数,跟 split 作用一样
http://blog.csdn.net/peng13nannan/article/details/7418927