有这样一个表
 name age
'name1'  20
'name2'  21
'name3'  20
'name4'  21

现在相得到这样的结果

'name1,name3'   20
'name2,name4'   21

就是对年龄分组,得到用逗号分隔的名字串.

请问这个sql语句怎么写?一条sql能实现吗?请高手指点!

解决方案 »

  1.   

    declare @tb table (name varchar(10),age int)
    insert into @tb select 'name1',20
    insert into @tb select 'name2',21
    insert into @tb select 'name3',20
    insert into @tb select 'name4',21SELECT age,
    name=CAST(MIN(name) as varchar(10))
    + ','+CAST(MAX(name) as varchar(10))
    FROM @tb
    GROUP BY ageage name
    20 name1,name3
    21 name2,name4
      

  2.   

    declare @tb table (name varchar(10),age int)
    insert into @tb select 'name1',20
    insert into @tb select 'name2',21
    insert into @tb select 'name3',20
    insert into @tb select 'name4',21SELECT age,
    name=MIN(name)+ ','+MAX(name)
    FROM @tb
    GROUP BY age
      

  3.   


    declare @s table(name varchar(20),age int)
    insert into @s select 'name1',20
    union all
    select 'name2',21
    union all
    select 'name3',20
    union all
    select 'name4',21SELECT names,age
    FROM(
        SELECT DISTINCT 
            age
        FROM @s
    )A
    OUTER APPLY(
        SELECT 
            [names]= STUFF(REPLACE(REPLACE(
                (
                    SELECT name FROM @s N
                    WHERE age = A.age
                    FOR XML AUTO
                ), '<N name="', ','), '"/>', ''), 1, 1, '')
    )N
      

  4.   

    倒。。这方法要是name有三个呢?
    组合不是出错了嘛`呵呵``