我的资料表型为
A   B
1   a
2    b
3   c
想合并成1 2 3    a b c
谢谢大家!

解决方案 »

  1.   

    declare @t table(A varchar,  B varchar)
    insert @t select 1 , 'a'
    union all select 2  ,'b'
    union all select 3  ,'c'SELECT b.* FROM
    (SELECT x=CAST((SELECT * FROM @t FOR XML PATH('r')) AS XML)) a
    CROSS APPLY
    (SELECT a=a.x.query('for $a in //A return string($a)'),b=a.x.query('for $a in //B return string($a)')) b
      

  2.   

    自己学吧:--各种字符串分函数--3.3.1 使用游标法进行字符串合并处理的示例。
    --处理的数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',1
    UNION ALL SELECT 'a',2
    UNION ALL SELECT 'b',1
    UNION ALL SELECT 'b',2
    UNION ALL SELECT 'b',3--合并处理
    --定义结果集表变量
    DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))--定义游标并进行合并处理
    DECLARE tb CURSOR LOCAL
    FOR
    SELECT col1,col2 FROM tb ORDER BY  col1,col2
    DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)
    OPEN tb
    FETCH tb INTO @col1,@col2
    SELECT @col1_old=@col1,@s=''
    WHILE @@FETCH_STATUS=0
    BEGIN
    IF @col1=@col1_old
    SELECT @s=@s+','+CAST(@col2 as varchar)
    ELSE
    BEGIN
    INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
    SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
    END
    FETCH tb INTO @col1,@col2
    END
    INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
    CLOSE tb
    DEALLOCATE tb
    --显示结果并删除测试数据
    SELECT * FROM @t
    DROP TABLE tb
    /*--结果
    col1       col2
    ---------- -----------
    a          1,2
    b          1,2,3
    --*/
    GO
    /*==============================================*/
    --3.3.2 使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
    --处理的数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',1
    UNION ALL SELECT 'a',2
    UNION ALL SELECT 'b',1
    UNION ALL SELECT 'b',2
    UNION ALL SELECT 'b',3
    GO--合并处理函数
    CREATE FUNCTION dbo.f_str(@col1 varchar(10))
    RETURNS varchar(100)
    AS
    BEGIN
    DECLARE @re varchar(100)
    SET @re=''
    SELECT @re=@re+','+CAST(col2 as varchar)
    FROM tb
    WHERE col1=@col1
    RETURN(STUFF(@re,1,1,''))
    END
    GO--调用函数
    SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
    --删除测试
    DROP TABLE tb
    DROP FUNCTION f_str
    /*--结果
    col1       col2
    ---------- -----------
    a          1,2
    b          1,2,3
    --*/
    GO/*==============================================*/
    --3.3.3 使用临时表实现字符串合并处理的示例
    --处理的数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',1
    UNION ALL SELECT 'a',2
    UNION ALL SELECT 'b',1
    UNION ALL SELECT 'b',2
    UNION ALL SELECT 'b',3--合并处理
    SELECT col1,col2=CAST(col2 as varchar(100)) 
    INTO #t FROM tb
    ORDER BY col1,col2
    DECLARE @col1 varchar(10),@col2 varchar(100)
    UPDATE #t SET 
    @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,
    @col1=col1,
    col2=@col2
    SELECT * FROM #t
    /*--更新处理后的临时表
    col1       col2
    ---------- -------------
    a          1
    a          1,2
    b          1
    b          1,2
    b          1,2,3
    --*/
    --得到最终结果
    SELECT col1,col2=MAX(col2) FROM #t GROUP BY col1
    /*--结果
    col1       col2
    ---------- -----------
    a          1,2
    b          1,2,3
    --*/
    --删除测试
    DROP TABLE tb,#t
    GO
    /*==============================================*/--3.3.4.1 每组 <=2 条记录的合并
    --处理的数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',1
    UNION ALL SELECT 'a',2
    UNION ALL SELECT 'b',1
    UNION ALL SELECT 'b',2
    UNION ALL SELECT 'c',3--合并处理
    SELECT col1,
    col2=CAST(MIN(col2) as varchar)
    +CASE 
    WHEN COUNT(*)=1 THEN ''
    ELSE ','+CAST(MAX(col2) as varchar)
    END
    FROM tb
    GROUP BY col1
    DROP TABLE tb
    /*--结果
    col1       col2      
    ---------- ----------
    a          1,2
    b          1,2
    c          3
    --*/--3.3.4.2 每组 <=3 条记录的合并
    --处理的数据
    CREATE TABLE tb(col1 varchar(10),col2 int)
    INSERT tb SELECT 'a',1
    UNION ALL SELECT 'a',2
    UNION ALL SELECT 'b',1
    UNION ALL SELECT 'b',2
    UNION ALL SELECT 'b',3
    UNION ALL SELECT 'c',3--合并处理
    SELECT col1,
    col2=CAST(MIN(col2) as varchar)
    +CASE 
    WHEN COUNT(*)=3 THEN ','
    +CAST((SELECT col2 FROM tb WHERE col1=a.col1 AND col2 NOT IN(MAX(a.col2),MIN(a.col2))) as varchar)
    ELSE ''
    END
    +CASE 
    WHEN COUNT(*)>=2 THEN ','+CAST(MAX(col2) as varchar)
    ELSE ''
    END
    FROM tb a
    GROUP BY col1
    DROP TABLE tb
    /*--结果
    col1       col2
    ---------- ------------
    a          1,2
    b          1,2,3
    c          3
    --*/
    GO
      

  3.   


    declare @t table(A int ,B varchar(5)) 
    insert @t select 1,  'a' 
    insert @t select 2,  'b' 
    insert @t select 3,  'c'
    declare @A varchar(5000)
    declare @B varchar(5000)
    set @A='' set @B=''
    select @A=@A+' '+cast(A as varchar(10)) from @T
    select @B=@B+' '+cast(B as varchar(10)) from @T
    select @A,@B/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     1 2 3                                                                                                                                                                                                                                                            a b c(所影响的行数为 1 行)*/
      

  4.   


    没太明白意思,是这样吗?declare @tmp table
    (A varchar(10),
    B varchar(10))declare @tmp2 table
    (A varchar(10),
    B varchar(10))insert into @tmp
    select '1','a' union 
    select '2','b' union
    select '3','c'declare @As varchar(8000),@Bs varchar(8000)
    set @As = ''
    set @Bs = ''
    select @As = @As + A + ' '  from @tmp
    select @Bs = @Bs + B + ' '  from @tmpinsert into @tmp2 select @As,@Bsselect * from @tmp
    select * from  @tmp2
      

  5.   

    去掉下划线?自己转成varchar就没了。因为xquery的结果仍是xml
    declare @t table(A varchar,  B varchar)
    insert @t select 1 , 'a'
    union all select 2  ,'b'
    union all select 3  ,'c'SELECT CAST(b.a AS VARCHAR(MAX)) a , CAST(b.b AS VARCHAR(MAX))  b FROM
        (SELECT x=CAST((SELECT * FROM @t FOR XML PATH('r')) AS XML)) a
    CROSS APPLY
        (SELECT a=a.x.query('for $a in //A return string($a)'),b=a.x.query('for $a in //B return string($a)')) b
      

  6.   


    declare @t table(A varchar,  B varchar)
    insert @t select 1 , 'a'
    union all select 2  ,'b'
    union all select 3  ,'c'
    DECLARE @A VARCHAR(50),@B VARCHAR(50)
    SELECT @A=ISNULL(@A,'')+' '+A,@B=ISNULL(@B,'')+' '+B FROM @TSELECT @A,@B/*
    ------------------------ ----------------------------
     1 2 3                   a b c(所影响的行数为 1 行)
    */
      

  7.   

    create table aa
    (
       A varchar(8),
       B varchar(8)
    )insert into aa values('1','a')
    insert into aa values('2','b')
    insert into aa values('3','c')
    go
    declare @a1 varchar(8),@b1 varchar(8),@a2 varchar(8),@b2 varchar(8)
    declare sss cursor
    for
    select * from aaopen sssfetch next from sss into @a1,@b1
    set @a2=''
    set @b2=''
    while @@FETCH_STATUS = 0
    begin 
     select @a2=@a2+' '+@a1
     select @b2=@b2+' '+@b1
      --print @a2
    fetch next from sss into @a1,@b1
    end
    print @a2
    print @b2
    --begin
      declare @t table(a varchar(10),b varchar(10))
      insert into @t values(@a2,@b2)
      select *from @t
    --end 
    close sss
    deallocate sss