现有数据如下:
姓名      类别
A         西瓜
A         黄瓜
A         南瓜
A         冬瓜
...       ...可能很多种瓜现在行转列的结果已经可以做出来
结果如下:姓名 类别1 类别2 类别3 类别4  ...
A    西瓜  黄瓜  南瓜  冬瓜   ...现要求结果如下
姓名 类别
A     西瓜,黄瓜,南瓜,冬瓜...
这样的语句怎么实现  

解决方案 »

  1.   

    select 姓名,
           类别=stuff((select ','+类别
                         from tb
                       where 姓名=t.姓名
                          for xml path('')),1,1,'')
    from tb t
    group by 姓名
      

  2.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([姓名] nvarchar(1),[类别] nvarchar(2))
    Insert tb
    select N'A',N'西瓜' union all
    select N'A',N'黄瓜' union all
    select N'A',N'南瓜' union all
    select N'A',N'冬瓜'
    Go
    select 姓名,
           类别=stuff((select ','+类别
                         from tb
                       where 姓名=t.姓名
                          for xml path('')),1,1,'')
    from tb t
    group by 姓名
    /*
    姓名   类别
    ---- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    A    西瓜,黄瓜,南瓜,冬瓜(1 個資料列受到影響)*/
      

  3.   

    非常感谢,可以使用,没怎么用过stuff,之前实现这个功能使用游标,效率可想而知,谢谢!!!