有表tb, 如下:
id value
----------- ----------- 1 aa,bb 2 aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value
----------- -------- 1 aa 1 bb 2 aaa 2 bbb 2 ccc
1. 旧的解决方法(sql server 2000)
select a.id, substring(a.[value], b.number, charindex(',', a.[value] + ',', b.number) - b.number)
FROM tb a, master..spt_values b
WHERE b.type='p' and substring(',' + a.[value],b.number, 1) = ','
2. 新的解决方法(sql server 2005)
create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go
SELECT a.id, b.value
FROM(
SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLaCE([value], ',', ' </v> <v>') + ' </v> </root>') FROM tb
)a
OUTER APPLY(
SELECT value = N.v.value('.', 'varchar(100)') FROM a.[value].nodes('/root/v') N(v)
)b
DROP TabLE tb
/*
id value
----------- ------------------------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc