分組字元合併SQL語句

2021-05-25 06:59:12 字數 2530 閱讀 2715

/*

描述:將如下形式的資料按id欄位合併value欄位。

id value

----- ------

1 aa

1 bb

2 aaa

2 bbb

2 ccc

需要得到結果:

id value

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

1 aa,bb

2 aaa,bbb,ccc

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

*/--

1、sql2000中只能用自定義的函式解決

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2,'ccc')

gocreate function dbo.f_str(@id int)

returns varchar(100)

asbegin

declare @str varchar(1000)

set @str='' select @str=@str+''+cast(value as varchar)

from tb where id = @id

set @str=right(@str , len(@str) - 1)

return @str

endgo

--呼叫函式

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

drop function dbo.f_str

drop table tb

--2、sql2005中的方法

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

goselect id, [value] = stuff((select ',' + [value] from tb t where id = tb.id

for xml path('')) , 1 , 1 , '')from tb group by id

drop table tb

--3、使用游標合併資料

create table tb(id int, value varchar(10))

insert into tb values(1, 'aa')

insert into tb values(1, 'bb')

insert into tb values(2, 'aaa')

insert into tb values(2, 'bbb')

insert into tb values(2, 'ccc')

godeclare @t table(id int,value varchar(100))

--定義結果集表變數

--定義游標並進行合併處理

declare my_cursor cursor local for

select id , value from tb

declare @id_old int , @id int , @value varchar(10) , @s varchar(100)

open my_cursor fetch my_cursor into @id , @value

select @id_old = @id , @s=''while @@fetch_status = 0

begin

if @id = @id_old

select @s = @s + ',' + cast(@value as varchar) else

begin

insert @t values(@id_old , stuff(@s,1,1,''))

select @s = ',' + cast(@value as varchar) , @id_old = @id

endfetch my_cursor into @id , @value end

insert @t values(@id_old , stuff(@s,1,1,''))

close my_cursor

deallocate my_cursor

select * from @t

drop table tb

學習筆記 SQL語句處理分組合併

今天在博問上看到乙個sql語句需求 表結構 id name 1 羅濤 1 濤帥帥 2 劉亮 2 亮哥 2 亮傻 要得出結果 id name 1 羅濤,濤帥帥 2 劉亮,亮哥,亮傻 這是乙個典型的分組合併的需求,一般有兩種方法,一是寫乙個函式處理,二是用xml for path方法,如下 1 建立測試...

學習筆記 SQL語句處理分組合併

今天在博問上看到乙個sql語句需求 表結構 id name 1 羅濤 1 濤帥帥 2 劉亮 2 亮哥 2 亮傻 要得出結果 id name 1 羅濤,濤帥帥 2 劉亮,亮哥,亮傻 這是乙個典型的分組合併的需求,一般有兩種方法,一是寫乙個函式處理,二是用xml for path方法,如下 1 建立測試...

1767 字元合併

description 有乙個長度為 n 的 01 串,你可以每次將相鄰的 k 個字元合併,得到乙個新的字元並獲得一定分數。得到的新字 符和分數由這 k 個字元確定。你需要求出你能獲得的最大分數。input 第一行兩個整數n,k。接下來一行長度為n的01串,表示初始串。接下來2k行,每行乙個字元ci...