一个sql的查询结果是:select * from t1查询结果是:
id   AppD_Name    userName
 1     会签            xm
 1     会签            cp
 2      会签            aa想用sql在此查询结果上查出:
id   AppD_Name    userName
 1     会签            xm,cp
 2      会签            aa

解决方案 »

  1.   

    select id ,AppD_Name ,
           userName=stuff((select ','+userName 
                  from t1 where id=a.id and AppD_Name=a.AppD_Name for xml path('')),1,1,'')
    from t1 a group by id ,AppD_Name
      

  2.   


    with tb as (select 1 a,     '会签' b,            'xm' c union all
    select  1,     '会签',            'cp' union all
    select  2,      '会签',            'aa'
    )
    select distinct a,b,
    stuff((select ','+c from tb where a.a=tb.a and a.b=tb.b 
    for xml path('')),1,1,'') from tb a
      

  3.   

    CREATE TABLE #t2(
    id int,
    AppD_Name varchar(10),
    userName  varchar(10))
    insert into #t2(id,AppD_Name) select distinct id,AppD_Name from t1
    Declare @id int,@userName varchar(10),@uname varchar(10),@pd int,@c1 int,@c2 int,@s1 int,@s2 int
    select @c1=count(id) from #t2Declare rea CURSOR FOR
    select id from #t2
    open rea
    set @s1=0
    while @s1<@c1
    begin
    set @s1=@s1+1
    fetch next from rea into @iddeclare na CURSOR FOR
    select userName from t1 where id=@id
    open na
    set @s2=0
    set @pd=0
    select @c2=count(id) from t1 where id=@id
    while @s2<@c2
    begin
    set @s2=@s2+1
    set @pd=@pd+1
    fetch next from na into @uname
    if (@pd=1)
    set @userName=@uname
    else
    set @userName=@userName+','+@uname
    end
    set @s2=0
    set @pd=0
    update #t2 set userName=@userName where id=@id
    CLOSE na
    DEALLOCATE naend
    CLOSE rea
    DEALLOCATE rea
    GO
    select * from #t2
    drop table #t2
      

  4.   

    http://hi.baidu.com/gagahjt/item/bfe3cbf3f3b833e61b111fc6
      

  5.   

    是for xml path('')这个实现的,stuff()仅仅是把前面的逗号给去掉。
    之前一直都没用过XML搞得我用了两个游标和一个临时表才实现lz想要的结果,LZ也可以看看我写的,多一种方法多一种思路。
      

  6.   

    其实这个需求就是对字符串的累加
    sql语法里有sum(数值)了,sql的设计者却想不到提供一个sum(字符串)的功能
    希望新版能知错就改那个分页(top n skip m)功能也是,始终只有半截(只有top n没有skip m),搞得分页要大动干戈(多次使用top n来倒腾,或利用sql2005才支持的row_number()函数)
    sql2012才支持完整的分页
      

  7.   

    use xuanya
    if object_id('csdn','u') is not null
    drop table csdn --按你的要求创建一个表,表名和列名跟你说的有点不一样,内容相同
    create table csdn(
    id int,
    app_name varchar(20),
    user_name varchar(20))
    insert into csdn values(1,'会签','xm')
    insert into csdn values(1,'会签','cp')
    insert into csdn values(2,'会签','aa')
    go
    select b.id,b.app_name,left(std,len(std)-1) from(
    select id,app_name,(select user_name+','
    from csdn where id=a.id and app_name=a.app_name
    FOR XML PATH('')) as std
     
    from csdn as a
    group by id,app_name) as b红色部分是通过FOR XML PATH 将id和app_name相同的部分的user_name显示成“xm,cp”的格式;
    其余的部分不难,你应该能看懂了。
    这个程序我试过了,是正确的