有表tb, 如下:
id values
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
欲按,分拆values列, 分拆後結果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
之前的老辦法, 一般是使用臨時表
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 #
-- 在sql 2005中, 借用xml, 可以簡單地一句來實現這個功能
-- 示例資料
declare @t table(id int, [values] varchar(100))
insert @t select 1, 'aa,bb'
union all select 2, 'aaa,bbb,ccc'
-- 查詢處理
select a.id, b.value
from(
select id, [values] = convert(xml,
'' + replace([values], ',', '
') + '
/*--結果
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
(5 行受影響)
--*/
交流 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...
交流 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,如下 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 i...