SQL查詢多行合併成一行

2021-05-27 19:22:50 字數 1418 閱讀 1726

問題描述:

無論是在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有兩個角色 管理員和教師 也就是使用者和角色是多對多的關係 我們現在的需求是,將這兩個合併在一塊,由兩行資料變成一行資料 也就是在形式上將多對...