sqlserver字串合併 merge 方法彙總

2021-09-22 10:44:12 字數 3833 閱讀 3643

--方法1

--使用游標法進行字串合併處理的示例。

--處理的資料

create table tb(col1 varchar(10),col2 int)

insert tb select 'a',1

union all select 'a',2

union all select 'b',1

union all select 'b',2

union all select 'b',3

--合併處理

--定義結果集表變數

declare @t table(col1 varchar(10),col2 varchar(100))

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

declare tb cursor local

forselect col1,col2 from tb order by  col1,col2

declare @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)

open tb

fetch tb into @col1,@col2

select @col1_old=@col1,@s=''

while @@fetch_status=0

begin

if @col1=@col1_old

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

else

begin

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

select @s=','+cast(@col2 as varchar),@col1_old=@col1

endfetch tb into @col1,@col2

endinsert @t values(@col1_old,stuff(@s,1,1,''))

close tb

deallocate tb

--顯示結果並刪除測試資料

select * from @t

drop table tb

/*--結果

col1       col2

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

a          1,2

b          1,2,3

--*/ go

--方法2

--使用使用者定義函式,配合select處理完成字串合併處理的示例

--處理的資料

create table tb(col1 varchar(10),col2 int)

insert tb select 'a',1

union all select 'a',2

union all select 'b',1

union all select 'b',2

union all select 'b',3 go

--合併處理函式

create function dbo.f_str(@col1 varchar(10))

returns varchar(100) as

begin

declare @re varchar(100)

set @re=''

select @re=@re+','+cast(col2 as varchar)

from tb

where col1=@col1

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

end go

--呼叫函式

select col1,col2=dbo.f_str(col1) from tb group by col1

--刪除測試

drop table tb

drop function f_str

/*--結果

col1       col2

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

a          1,2

b          1,2,3

--*/ go

--方法3

--使用臨時表實現字串合併處理的示例

--處理的資料

create table tb(col1 varchar(10),col2 int)

insert tb select 'a',1

union all select 'a',2

union all select 'b',1

union all select 'b',2

union all select 'b',3

--合併處理

select col1,col2=cast(col2 as varchar(100)) 

into #t from tb

order by col1,col2

declare @col1 varchar(10),@col2 varchar(100)

update #t set 

@col2=case when @col1=col1 then @col2+','+col2 else col2 end,

@col1=col1,

col2=@col2

select * from #t

/*--更新處理後的臨時表

col1       col2

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

a          1

a          1,2

b          1

b          1,2

b          1,2,3

--*/

--得到最終結果

select col1,col2=max(col2) from #t group by col1

/*--結果

col1       col2

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

a          1,2

b          1,2,3

--*/

--刪除測試

drop table tb,#t go

我的系列文章

a.sql server2005 transact-sql 新兵器學習 

b.mcad學習 

c.**閱讀總結 

d.asp.net狀態管理 

e.db(資料庫) 

f.wap 

g.winform 

h.flex

我的好文推薦

sql server2005 transact-sql 新兵器學習總結之-總結 

ms sql資料庫備份和恢復儲存過程(加強版本) 

sql server中分布式查詢隨筆(鏈結伺服器(sp_addlinkedserver)和遠端登入對映(sp_addlinkedsrvlogin)使用小總結) 

asp.net2.0國際化/本地化應用程式的實現總結(多語言,多文化頁面的實現) 

wap開發資料站(最新更新) 

自定義格式字串隨筆 (iformattable,iformatprovider,icustomformatter三介面的實現) 

mcad學習筆記之非同步程式設計(asynccallback 委託,iasyncresult介面,begininvoke方法,endinvoke方法的使用小總結) 

mcad學習筆記之通過反射呼叫類的方法,屬性,字段,索引器(2種方法) 

mcad學習筆記之序列化(2進製和soap序列 化) 

mcad學習筆記之委託再理解(delegate的構造器,begininvoke,endinvoke,invoke4個方法的**) 

asp.net狀態管理之一(概括篇) 

flex,fms學習筆記

sql server 合併字串

描述 將如下形式的資料按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中只能用自定義的函式...

sqlserver字串合併 merge 方法彙總

方法1 使用游標法進行字串合併處理的示例。處理的資料 create table tb col1 varchar 10 col2 int insert tb select a 1 union all select a 2 union all select b 1 union all select b ...

sqlserver字串合併 merge 方法彙總

方法1 使用游標法進行字串合併處理的示例。處理的資料 create table tb col1 varchar 10 col2 int insert tb select a 1 union all select a 2 union all select b 1 union all select b ...