問題描述:
無論是在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 的和(字串相加)
1. 舊的解決方法
-- 1. 建立處理函式
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
-- 2. 新的解決方法
-- 示例資料
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'
-- 查詢處理
select *
from(
select distinct
idfrom @t
)aselect
[values]= stuff(replace(replace(
(select value from @t n
where id = a.id
for xml auto
), '', ''), 1, 1, '')
)n/*--結果
id values
----------- ----------------
1 aa,bb
2 aaa,bbb,ccc
(2 行受影響)
--*/
oracle多行合併成一行
在mysql有關鍵字group concat提供了類似的功能,在oracle中類似功能關鍵字是wm concat.比如我有如下查詢資料 但是我希望能夠顯示成一行查詢出來,結果圖如下 關鍵sql 形如 select t.sglcheckid,wm concat t.salemodulename fro...
SQL 語句一行拆成多行及多行合併成一行的方法
一 sql 語句對一行 單元格 資料拆分成多行 有時候我們也許對一行資料拆分成多行的操作 例如 col1 col2 1 a,b,c 2 d,e 3 f 拆分成 col1 col2 1 a1 b 1 c 2 d 2 e 3 f 下面給出幾個經常用到的方法 1 sql2000用輔助表 ifobject ...
oracle 將多行合併成一行
使用者id 使用者名稱 角色 001 admin 管理員 002 betty 教師 001 admin 教師 003 cole 學生 可以看到使用者admin有兩個角色 管理員和教師 也就是使用者和角色是多對多的關係 我們現在的需求是,將這兩個合併在一塊,由兩行資料變成一行資料 也就是在形式上將多對...