A B
1 a
2 b
3 c
想把B字段全部查询出来,得到结果:a,b,c
以逗号分割。

解决方案 »

  1.   

    declare @a varchar(8000)
    select @a=isnull(@a+',','')+b from [table] order by a
    select @a
      

  2.   

    DECLARE @STR VARCHAR(8000)SELECT @STR=ISNULL(@STR+',','')+b FROM (SELECT DISTINCT b FROM 表)AS TSELECT @STR
      

  3.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([A] int,[B] nvarchar(1))
    Insert tb
    select 1,N'a' union all
    select 2,N'b' union all
    select 3,N'c'
    Go
    Select
         distinct  
         stuff((select ','+[B] from tb for xml path('')),1,1,'')
    from tb t
    /*
    a,b,c*/
      

  4.   

    能不用变量吗?数据很多,可能会超过varchar8000
      

  5.   

    declare @a varchar(8000)
    set @s=''
    select @a=@a+isnull(b,'')+',' from [table] order by a
    PRINT @a
      

  6.   

    超过8000的话 改成VARCHAR(MAX)
      

  7.   


    IF object_id('tempdb..#','U') IS NOT NULL
        DROP TABLE #;
    GOCREATE TABLE #(
    A  int
    ,B varchar(30)
    );
    goINSERT INTO #
    SELECT 1,'a' UNION ALL
    SELECT 2,'b' UNION ALL
    SELECT 3,'c'
    goDECLARE @Str varchar(8000)SELECT @Str = isnull(@Str + ',','') + B
    FROM #;SELECT @Str;--结果
    /*
    (3 行受影响)
    a,b,c
    */
      

  8.   

    select distinct b from
    (select stuff((select ','+B from table for xml path('')),1,1,'') as b
    from table ) a
      

  9.   


    IF OBJECT_ID('dbo.tb') IS NOT NULL 
    DROP TABLE dbo.tb;
    CREATE TABLE tb
    (
      A INT IDENTITY,
      B VARCHAR(10)
    );
    INSERT INTO tb SELECT 'a'
    UNION ALL SELECT 'b'
    UNION ALL SELECT 'c'DECLARE @s VARCHAR(50)
    SET  @s = ''
    SELECT @s = @s + ',' + B FROM tb
    SELECT STUFF(@s,1,1,'') -------------
    a,b,c(1 row(s) affected)