有一个用户表(姓名,编号,爱好)
      user(name,id,hobby),
里面的数据有:
      张三 001 篮球
      张三 001 电影
      李四 002 足球
      王五 003 上网
      李四 002 看美女
现在要求写一SQL语句,使查出结果为:
      张三 001 篮球,电影
      李四 002 足球,看美女
      王五 003 上网
也就是要把一个人的爱好组合一下,搞了一天也没搞定,那位达人会,望指点一下啊

解决方案 »

  1.   

    论坛好多这样的问题 随便贴一个 其实你可以在精华贴里看看
    http://topic.csdn.net/u/20100326/15/d6d4614b-15fb-4275-bc2d-4b6ecacaecea.html
      

  2.   

    --> 测试数据:#user
    if object_id('tempdb.dbo.#user') is not null drop table #user
    create table #user([name] varchar(4),[id] varchar(3),[hobby] varchar(6))
    insert #user
    select '张三','001','篮球' union all
    select '张三','001','电影' union all
    select '李四','002','足球' union all
    select '王五','003','上网' union all
    select '李四','002','看美女'select name,id,
    [hobby]=stuff((
    select ','+convert(varchar(20),[hobby]) from #user  where t.id=id for XML path(''))
    ,1,1,'')
    from #user t
    group by name,id
      

  3.   

    IF OBJECT_ID('USER') IS NOT NULL DROP TABLE [USER]
    GO
    CREATE TABLE [USER](
    NAME VARCHAR(10)
    ,ID VARCHAR(5)
    ,HOBBY VARCHAR(10)
    )
    INSERT INTO [USER]
    SELECT '张三','001','篮球' UNION ALL
    SELECT '张三','001','电影' UNION ALL
    SELECT '李四','002','足球' UNION ALL
    SELECT '王五','003','上网' UNION ALL
    SELECT '李四','002','看美女'SELECT NAME,ID
    ,STUFF((SELECT ','+HOBBY FROM [USER] T2 WHERE T2.NAME=T1.NAME FOR XML PATH('')),1,1,'')
    FROM [USER] T1
    GROUP BY NAME,ID
    /*
    NAME       ID    
    ---------- ----- ---------------
    李四         002   足球,看美女
    王五         003   上网
    张三         001   篮球,电影
    */
      

  4.   

     create table [user](name nvarchar(10),id varchar(10),hobby nvarchar(10))
    insert into [user] select '张三','001','篮球'
    insert into [user] select '张三','001','电影'
    insert into [user] select '李四','002','足球'
    insert into [user] select '王五','003','上网'
    insert into [user] select '李四','002','看美女'
    go
    select name,stuff((select ','+hobby from [user] where name=a.name for xml path('')),1,1,'') from [user] a group by name
    go
    drop table [user]
    /*
    name       
    ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    李四         足球,看美女
    王五         上网
    张三         篮球,电影(3 行受影响)
    */
      

  5.   


    --SQL2000--1. 创建处理函数
    create table tb(name varchar(10),ID int,hobby varchar(20))
    insert into tb 
    select '张三','001','篮球'
    union all
    select '张三','001','电影'
    union all
    select '李四','002','足球'
    union all
    select '王五','003','上网'
    union all
    select '李四','002','看美女'goCREATE FUNCTION dbo.f_str(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
        DECLARE @r varchar(8000)
        SET @r = ''
        SELECT @r = @r + ',' + hobby FROM tb WHERE id=@id
        RETURN STUFF(@r, 1, 1, '')
    END
    GO-- 调用函数
    SELECt name, hobby = dbo.f_str(id) FROM tb GROUP BY name,iddrop table tb
    drop function dbo.f_str
    /*(所影响的行数为 5 行)name       hobby
    李四         足球,看美女
    王五         上网
    张三         篮球,电影(所影响的行数为 3 行)*/
      

  6.   


    create table #tb(name varchar(20),id varchar(20),hobdy varchar(20))insert into #tb values('张三','001','篮球')
    insert into #tb values('张三','001','电影')
    insert into #tb values('李四','002','足球')
    insert into #tb values('王五','003','上网')
    insert into #tb values('李四','002','看美女')Select tb1.[Name],tb1.id,(Select  ''+hobdy from #tb as tb2 where tb2.id=tb1.id for xml Path('')) 
    From #tb tb1 group by tb1.id,tb1.[name]