原数据FID FName FTotal
1 AAA null
2 BBB 分支机构---12---重庆中心|| 部门---50.01---网络
3 CCC 网点---99.0013---重庆中心求一查询语句,得出下面内容
FID FName FType FDetailID FDetailName
1 AAA
2 BBB 分支机构 12 重庆中心
2 BBB 部门 50.01 网络
3 CCC 网点 99.0013 重庆中心
后三列都是字符串。
谢谢。
1 AAA null
2 BBB 分支机构---12---重庆中心|| 部门---50.01---网络
3 CCC 网点---99.0013---重庆中心求一查询语句,得出下面内容
FID FName FType FDetailID FDetailName
1 AAA
2 BBB 分支机构 12 重庆中心
2 BBB 部门 50.01 网络
3 CCC 网点 99.0013 重庆中心
后三列都是字符串。
谢谢。
--分拆列值
--原著:邹建
--改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳/*
有表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 top 8000 id = identity(int, 1, 1) into # from syscolumns a, syscolumns b select A.id, substring(A.[values], B.id, charindex(',', A.[values] + ',', B.id) - B.id)
from tb A, # B
where substring(',' + A.[values], B.id, 1) = ',' drop table # --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 (5 行受影响)
*/
declare @table table (FID int,FName varchar(3),FTotal varchar(50))
insert into @table
select 1,'AAA',null union all
select 2,'BBB','分支机构---12---重庆中心||部门---50.01---网络' union all
select 3,'CCC','网点---99.0013---重庆中心'select A.FID,A.FName, B.FTotal
from(
select FID, FName,
FTotal = convert(xml,' <root> <v>' + replace(FTotal, '||', ' </v> <v>') + ' </v> </root>') from @table
)A
outer apply(
select FTotal = N.v.value('.', 'varchar(100)') from A.FTotal.nodes('/root/v') N(v)
)B
/*
FID FName FTotal
----------- ----- --------------------------
1 AAA NULL
2 BBB 分支机构---12---重庆中心
2 BBB 部门---50.01---网络
3 CCC 网点---99.0013---重庆中心
*/
----------- ----- --------------------------
1 AAA NULL
2 BBB 分支机构---12---重庆中心
2 BBB 部门---50.01---网络
3 CCC 网点---99.0013---重庆中心
*/得到这结果也行了,后面的我自己处理即可。两种方法那种效率高,现在客户是使用2005,但我想做的通用一点,2000的会很慢吗