表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

解决方案 »

  1.   

    字符串汇总问题,在SQL Server 2000下受推荐的方式为:用户定义函数。具体处理方法及实现请参考:
    ---------------------------------------------------------------------------------------
    --生成测试数据
    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
      

  2.   

    select 编码      尺码      庄   等级    仓位        品牌      人员+数量 as 
       备注 from table group by  编码
    不知道行不,楼主试试
      

  3.   

    --(不用函数实现更新、查询)
    --如下用于几列合并一列方法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 行)
      

  4.   

    create table tb
    (
    编码 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 行)