表1: 编码 尺码 庄 等级 仓位 品牌 人员 数量
D6003 600*600 4 优等品 1-1 1品牌 顾 4
D6003 600*600 4 优等品 1-1 1品牌 刘 3
D6003 600*600 4 优等品 1-1 1品牌 王 10
...
D2004 600*600 4 优等品 1-1 1品牌 顾 4
D2004 600*600 4 优等品 1-1 1品牌 刘 4
...希望得到的结果如下:(将表1中的人员、数量字段组合) 编码 尺码 庄 等级 仓位 品牌 备注
D6003 600*600 4 优等品 1-1 1品牌 顾 4 刘 3 王 10
D2004 600*600 4 优等品 1-1 1品牌 顾 4 刘 4
D6003 600*600 4 优等品 1-1 1品牌 顾 4
D6003 600*600 4 优等品 1-1 1品牌 刘 3
D6003 600*600 4 优等品 1-1 1品牌 王 10
...
D2004 600*600 4 优等品 1-1 1品牌 顾 4
D2004 600*600 4 优等品 1-1 1品牌 刘 4
...希望得到的结果如下:(将表1中的人员、数量字段组合) 编码 尺码 庄 等级 仓位 品牌 备注
D6003 600*600 4 优等品 1-1 1品牌 顾 4 刘 3 王 10
D2004 600*600 4 优等品 1-1 1品牌 顾 4 刘 4
---------------------------------------------------------------------------------------
--生成测试数据
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/
--删除测试数据
drop function f_str
drop table 表
go
备注 from table group by 编码
不知道行不,楼主试试
--如下用于几列合并一列方法1比方法2效率高
--借用一下子陌的表
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'declare @tb table(部门 int,人员 varchar(50),con int identity(1,1))
insert @tb
select * from 表begin tran
while exists(select 1 from @tb)
begin
update a
set a.人员=a.人员+','+b.人员
from 表 a ,@tb b
where a.部门=b.部门 and
not exists(select * from @tb where 部门=b.部门 and con<b.con )delete b
from @tb b where not exists(select 1 from @tb where 部门=b.部门 and con<b.con)
endselect distinct 部门, 显示=stuff(人员,1,charindex(',',人员),'') from 表部门 显示
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 张三,李四,王五
2 赵六,邓七,刘八(所影响的行数为 2 行)
(
编码 varchar(10),
尺码 varchar(10),
庄 int,
等级 varchar(10),
仓位 varchar(10),
品牌 varchar(10),
人员 varchar(10),
数量 int
)
insert into tb(编码,尺码,庄,等级,仓位,品牌,人员,数量) values('D6003','600*600',4,'优等品','1-1','1品牌','顾',4)
insert into tb(编码,尺码,庄,等级,仓位,品牌,人员,数量) values('D6003','600*600',4,'优等品','1-1','1品牌','刘',3)
insert into tb(编码,尺码,庄,等级,仓位,品牌,人员,数量) values('D6003','600*600',4,'优等品','1-1','1品牌','王',10)
insert into tb(编码,尺码,庄,等级,仓位,品牌,人员,数量) values('D2004','600*600',4,'优等品','1-1','1品牌','顾',4)
insert into tb(编码,尺码,庄,等级,仓位,品牌,人员,数量) values('D2004','600*600',4,'优等品','1-1','1品牌','刘',4)
gocreate function f_hb(@编码 varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ''
select @str = @str + ' ' + cast(人员 as varchar) + ' ' + cast(数量 as varchar) from tb where 编码 = @编码
set @str = right(@str , len(@str) - 1)
return(@str)
End
go--调用自定义函数得到结果:
select distinct 编码,尺码,庄,等级,仓位,品牌,dbo.f_hb(编码) as 备注 from tbdrop table tb
drop function f_hb编码 尺码 庄 等级 仓位 品牌 备注
----- ------- -- ------ ---- ----- ---------------
D2004 600*600 4 优等品 1-1 1品牌 顾 4 刘 4
D6003 600*600 4 优等品 1-1 1品牌 顾 4 刘 3 王 10(所影响的行数为 2 行)