以下是SQL语句,用到了临时表和游标的使用。

--查看源数据

select f_billno,f_invname from test

--定义两个临时变量用来保存游标取得的数据

DECLARE @c varchar(255)

DECLARE @c1 varchar(255)

--删除临时表

if object_id('tempdb..#tmp') is not null drop table #tmp

--建立临时表及生成数据

Create Table #tmp(fid varchar(4),ftext varchar(255))

insert into #tmp

select f_billno,'' from test group by f_billno

--取游标数据

declare cur_test CURSOR FOR

select f_billno,f_invname from test

open cur_test

fetch next from cur_test into @c,@c1

--第一个循环

while @@fetch_status=0

begin

   --重复取数据并生成相应的处理SQL

   exec('update #tmp set ftext=ftext+'''+@c1+' '' where fid='''+@c+'''');

   fetch next from cur_test into @c,@c1

end

--显示结果数据

select * from #tmp

--关闭游标

close cur_test

deallocate cur_test

纵向表内容
f_billno,f_invname
0001 商品1
0002 商品A
0001 商品2
0001 商品3
0002 商品B
0003 商品I
0003 商品II
目标效果
fid,ftext
0001 商品1商品2商品3
0002 商品A商品B
0003 商品I商品II