sql serser 2005 下合併字串

2021-06-15 21:04:27 字數 1383 閱讀 7542

無論是在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

即, group by id, 求 value 的和(字串相加)

這個問題的一般處理方法是, 寫乙個聚合函式:

create function dbo.f_str(@id int)

returns varchar(8000)

asbegin

declare @r varchar(8000)

set @r=''

select @r=@r+','+value from tb where id=@id

return stuff(@r,1,1,'')

endgo

-- 呼叫函式

select id, values=dbo.f_str(id) from tb group by id

這樣的問題是,函式不通用,必須為每個要處理的表編寫相應的處理函式

在sql2005中,這個問題的更好解決辦法是寫乙個clr函式,用於實現字串的聚合,這樣可以解決通用性的問題了。

而在我下面要實現的, 是只用一條sql語句來完成這個功能

(絕對是一條, 不會是用exec()取巧的那種)

-- 示例資料

declare @t table(id int, value varchar(10))

insert @t select 1, 'aa'

union all select 1, 'bb'

union all select 2, 'aaa'

union all select 2, 'bbb'

union all select 2, 'ccc'

/*--結果

id          values

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

1           aa,bb

2           aaa,bbb,ccc

(2 行受影響)

--*/

sql 2005新增了xml資料型別, 而且xml資料型別可以方便的與字元型別之間做轉換,上面的方法只是巧妙地利用了這一點,結合字串的一些處理函式就出來結果了

-- 下面這個示例也是合併字串的, 以系統表為列, 合併兩列

SQL Server2000和2005中合併列值

有表 tb,如下 id value 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到結果 id values 1 aa,bb 2 aaa,bbb,ccc 在sql server2000 中我們處理的方式一般都是用自定義函式去處理 舉例如下 create function dbo.f ...

L2 005 集合相似度

給定兩個整數集合,它們的相似度定義為 nc nt 100 其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入格式 輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m 1...

L2 005 集合相似度

給定兩個整數集合,它們的相似度定義為 nc nt 100 其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m 104 是集...