問題描述:
有表tb, 如下:
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
欲按,分拆
values列,
分拆後結果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
1. 舊的解決方法
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. 新的解決方法
-- 示例資料
declare
@t table
(id int
, [values] varchar
(100))
insert
@t select 1,
'aa,bb'
union
allselect 2,
'aaa,bbb,ccc'
-- 查詢處理
select
a.id, b.
value
from(
select id, [values] =
convert
(xml,
''+replace
([values],
',',''
)+''
) from @t )
a outer
select
value
= n.v.
value
('.'
,'varchar(100)')
from a.[values].nodes(
'/root/v'
) n(v) )
b /*--結果
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
(5 行受影響)
--*/
csdn
社群帖子位址
附
: 合併與分拆的
clr,
sql2005
的示例中有:
在安裝sql 2005
的示例後,預設安裝目錄為
drive:/program files/microsoft sql server/90/samples/engine/programmability/clr/stringutilities中
交流 SQL 2005溢用之 分拆列值
問題描述 有表tb,如下 idvalues 1aa,bb 2aaa,bbb,ccc 欲按,分拆 values列,分拆後結果如下 idvalue 1aa1bb 2aaa 2bbb 2ccc 1.舊的解決方法 select top 8000 id identity int 1,1 into from s...
交流 SQL 2005溢用之 分拆列值
問題描述 有表tb,如下 idvalues 1aa,bb 2aaa,bbb,ccc 欲按,分拆 values列,分拆後結果如下 idvalue 1aa1bb 2aaa 2bbb 2ccc 1.舊的解決方法 select top 8000 id identity int 1,1 into from s...
交流 SQL 2005溢用之 分拆列值
問題描述 有表tb,如下 idvalues 1aa,bb 2aaa,bbb,ccc 欲按,分拆 values列,分拆後結果如下 idvalue 1aa1bb 2aaa 2bbb 2ccc 1.舊的解決方法 select top 8000 id identity int 1,1 into from s...