問題描述:
無論是在
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...