分拆列值(转)

有表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 行受影响)
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值