交流 SQL 2005溢用之 分拆列值

2021-04-07 09:29:52 字數 1176 閱讀 3282

有表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...