应该写清楚点:现有如下表结构:
table1:
GroupID  Text      Sequence
001       text11    1
001       text12    2
001       text13    3
002       text21    1
002       text22    2想得到如下记录集:
GroupID    Text
001        text11,text12,text13
002        text21,text22即,把GroupID相同的记录的Text字段值连接起来,用逗号分隔。注:每个GroupID对应的记录条数不定。
请提供相对简练的SQL语句,可以使用存储过程、自定义函数等来实现。

解决方案 »

  1.   

    create function getstr(@id char(10))
    returns varchar(2000)
    as 
    begin
    declare @str varchar(2000)
    set @str=''
    select @str=@str+','+rtrim([text]) from table1
    where GroupID=@Id
    set @str=right(@str,len(@str)-1)
    return @str
    end
    select distinct GroupID,dbo.getstr(GroupID)
    from table1
      

  2.   

    create function getstr(@id char(10))
    returns varchar(2000)
    as 
    begin
    declare @str varchar(2000)
    set @str=''
    select @str=@str+','+rtrim([text]) from table1
    where GroupID=@Id
    order by Sequenceset @str=right(@str,len(@str)-1)
    return @str
    end
    select distinct GroupID,dbo.getstr(GroupID) as [text]
    from table1
      

  3.   

    用游标是可以实现,但由于在函数里执行exec + 变量的SQL语句,不行,它把exec后的语句都当成是存储过程,所以不能传递表名、关键字段名、关键字段查询条件值、要列出的字段等参数。 Yang_(扬帆破浪) 的做法简单、实用、巧妙,令我茅塞顿开,测试完后即会给分:)
      

  4.   

    我想把函数做成比较参数化的,如下:
    CREATE FUNCTION dbo.GetList ( @SearchTable varchar(50),@SearchField varchar(50), @SearchValue varchar(50),@ListField varchar(50) )
    RETURNS varchar(1000)  AS  
    BEGIN 
    declare @sListValue as varchar(1000), @sSql as varchar(1000)
    set @sListValue = ''
    set @sSql = 'select @sListValue=@sListValue + rtrim(' + @ListField + ') from ' + @SearchTable + ' where ' + @SearchField + '=''' + @SearchValue + ''''
    exec @sSql
    set @sListValue = right(@sListValue, len(@sListValue)-1)
    return @sListValue
    END还是老问题,SQL语句是变化的,主要是表名和where子句字段名都变化,无法直接执行,只能用exec?但这东东放到函数里,这时执行它会提示
    Could not find stored procedure 'select @sListValue=@sListValue + rtrim(Word) from English where GroupID='1''.如何解决!