有个问题请教下大家:M1      1
M1      2
M2      4
M2      5
M2      6怎么用语句变为这样的结构:M1      1,2
M2      4,5,6是不是不可以实现啊```

解决方案 »

  1.   

    --生成测试数据
    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.   

    以上是SQL Server 2000中实现方法的示例,照样改就行了。
      

  3.   

    To:libin_ftsafe(子陌红尘:TS for Banking Card) 在SQL2005 中为什么会说'f_str' 不是可以识别的 函数名。
      

  4.   

    selct ((m1,m2)字段名)  from 表  
    group by ((m1,m2)字段名) 
    order by ((m1,m2)字段名)
      

  5.   

    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
    小改下...函数真好  学习了...
      

  6.   

    可不可以不要创建FUNCTION 直接用SQL啊```因为这样创建的FUNCTION针对性太强了`只能这个表用  当然也可以通过参数 把表名称和字段名称传进去`` 不过还有别的办法``再次感谢 libin_ftsafe(子陌红尘:TS for Banking Card) 与各位
      

  7.   

    搞顶了``调用FUNCTION前要+创建用户的名称不是DBO
    如: XXX.functionName()谢谢大家```