交流 SQL 2005溢用之 合併列值

2021-04-16 12:21:14 字數 2162 閱讀 4180

問題描述:

無論是在

sql 2000

,還是在

sql 2005

中,都沒有提供字串的聚合函式,

所以,當我們在處理下列要求時,會比較麻煩:

有表tb,

如下:idvalue

----- ------

1aa1bb

2aaa

2bbb

2ccc

需要得到結果:

idvalues

------ -----------

1aa,bb

2aaa,bbb,ccc

即,group by id,

求value

的和(字串相加)

1. 舊的解決方法

-- 1.

建立處理函式

create

function dbo.f_str(@id int

)

returns

varchar

(8000)

as

begin

declare @r varchar

(8000)

set @r =

''

select @r = @r +

','+

value

from tb

where id=@id

return

stuff

(@r, 1, 1,'')

end

go--

呼叫函式

select

id,values

=dbo.f_str(id)

from

tb

group

by id

-- 2. 

新的解決方法

-- 示例資料

declare

@t table

(id int

,value

varchar

(10))

insert

@t select 1,

'aa'

union

allselect 1,

'bb'

union

allselect 2,

'aaa'

union

allselect 2,

'bbb'

union

allselect 2,

'ccc'

-- 查詢處理

select

*

from

(

select

distinct

id

from @t

)aouter

select

[values]=

stuff

(replace

(replace

(

(

select

value

from @t n

where id = a.id

forxmlauto

),',

','),

'"/>',''

), 1, 1,'')

)n/*--

結果 idvalues

----------- ----------------

1aa,bb

2aaa,bbb,ccc

(2 行受影響

)

--*/

csdn 

社群帖子位址

: 合併與分拆的

clr,

sql2005

的示例中有:

在安裝sql 2005

的示例後,預設安裝目錄為

drive:/program files/microsoft sql server/90/samples/engine/programmability/clr/stringutilities中

交流 SQL 2005溢用之 合併列值

問題描述 無論是在 sql 2000 還是在 sql 2005 中,都沒有提供字串的聚合函式,所以,當我們在處理下列要求時,會比較麻煩 有表tb,如下 idvalue 1aa1bb 2aaa 2bbb 2ccc 需要得到結果 idvalues 1aa,bb 2aaa,bbb,ccc 即,group ...

交流 SQL 2005溢用之 合併列值

無論是在sql 2000,還是在 sql 2005 中,都沒有提供字串的聚合函式,所以,當我們在處理下列要求時,會比較麻煩 有表tb,如下 id value 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到結果 id values 1 aa,bb 2 aaa,bbb,ccc 即,gr...

交流 SQL 2005溢用之 合併列值

問題描述 無論是在 sql 2000 還是在 sql 2005 中,都沒有提供字串的聚合函式,所以,當我們在處理下列要求時,會比較麻煩 有表 tb,如下 idvalue 1aa 1bb 2aaa 2bbb 2ccc 需要得到結果 idvalues 1aa,bb 2aaa,bbb,ccc 即,grou...