日期:2014-05-18  浏览次数:20635 次

请教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的。。


力气活 让他们写好了。
------解决方案--------------------
SQL code

--写完才看到是 2000 ,就贴个 2005 的

declare @t table(a varchar(10),b varchar(20))
insert into @t
select 'pp' ,'pp1' union all
select 'kk' ,'kk 1/kk 2' union all
select 'hh' ,'hh 1/hh 2/hh 3/hh 4'

select a.a,b.b
from(
select a,[value] = convert(xml,'<v>' + REPLACE(b, '/', '</v><v>') + '</v>') from @t
) a
outer apply(
select b = N.v.value('.', 'varchar(100)') from a.[value].nodes('/v') N(v)
) b

/*************************

a          b
---------- ----------------------------------------------------------------
pp         pp1
kk         kk 1
kk         kk 2
hh         hh 1
hh         hh 2
hh         hh 3
hh         hh 4

(7 行受影响)

------解决方案--------------------
SQL code

--2000

declare @t table(a varchar(10),b varchar(20))
insert into @t
select 'pp' ,'pp1' union all
select 'kk' ,'kk 1/kk 2' union all
select 'hh' ,'hh 1/hh 2/hh 3/hh 4'

select a.a,substring(a.b,b.number,charindex('/',a.b+'/',b.number)-b.number) b
from @t a ,master..spt_values b
where b.[type] = 'P' and b.number between 1 and len(a.b)
    and substring('/'+a.b,b.number,1) = '/'

/********************

a          b
---------- --------------------
pp         pp1
kk         kk 1
kk         kk 2
hh         hh 1
hh         hh 2
hh         hh 3
hh         hh 4

(7 行受影响)

------解决方案--------------------
你可以自已写一个 函数,跟 split 作用一样
http://blog.csdn.net/peng13nannan/article/details/7418927