/*
描述:將如下形式的資料按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...