sql多行轉為一列的合併問題

2021-08-23 13:22:22 字數 3652 閱讀 5089

/*

描述:將如下形式的資料按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')go

create

function

dbo.f_str(

@idint

) returns

varchar

(100)as

begin

declare

@str

varchar

(1000

)set

@str=''

select

@str

=@str+'

,'+cast

(value

asvarchar

) from

tb where

id =

@idset

@str

=right

(@str

, len

(@str) -

1)return

@str

endgo

--呼叫函式

select

id , value

=dbo.f_str(id)

from

tb group

byid

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')go

select

id,

[value]=

stuff

((select',

'+[value

]from

tb t

where

id =

tb.id

forxml path(

'')) , 1,

1, '')

from

tbgroup

byid

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')go

declare

@ttable

(id

int,value

varchar

(100

))--

定義結果集表變數

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

declare

my_cursor

cursor

local

forselect

id , value

from

tbdeclare

@id_old

int,

@idint

, @value

varchar(10

) ,

@svarchar

(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

asvarchar

)else

begin

insert

@tvalues

(@id_old

, stuff(@s

,1,1

,''))select@s=

','+

cast

(@value

asvarchar

) ,

@id_old

=@id

endfetch

my_cursor

into

@id,

@value

endinsert

@tvalues

(@id_old

, stuff(@s

,1,1

,''))close

my_cursor

deallocate

my_cursor

select

*from

@tdrop

table

tb

sql多行轉為一列的合併

一 資料庫sql server列值鏈式合併 需求 原始表的資料的結構如圖1所示,把相同guid的code值生成乙個鏈式字串。圖1 目標 我們希望達到的效果如圖2所示,這裡的guid變成唯一的了,這行的記錄中包含了這個guid所對應的code字段值的鏈式字串。圖2 分析與實現 要實現圖1到圖2的轉變,...

轉 簡單實用SQL指令碼 SQL多行轉為一列

一 資料庫sql server列值鏈式合併 需求 原始表的資料的結構如圖1所示,把相同guid的code值生成乙個鏈式字串。圖1 目標 我們希望達到的效果如圖2所示,這裡的guid變成唯一的了,這行的記錄中包含了這個guid所對應的code字段值的鏈式字串。圖2 分析與實現 要實現圖1到圖2的轉變,...

一列多行合併一列一行

方法1 定義臨時的varchar變數,通過游標一條條讀取,然後在迴圈中改變臨時變數的值最終輸出 關於游標的方法,這裡再敘述。sql2008中的方法 create table tb id int,value varchar 10 insert into tb values 1,aa insert in...