自定义函数+一句就可以否则一条sql语句不能实现
sql语句的条数与实际数据处理的效率没有直接关系.

解决方案 »

  1.   

    create function f_str(
    @f1 varchar(10)
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+f2 from tbname where f1=@f1
    return(stuff(@r,1,1,''))
    endselect f1,f2=dbo.f_str(f1) from tbname group by f1
      

  2.   

    --建立函数
    Create Function f_1(varchar(10))
    returns varchar(1000)
    as
    begin
         declare @str varchar(1000)
         set @str = ''
         select @str = @str + ',' + F2 from YouTable where F1 = @F1
         set @str = right(@str,len(@str) - 1)
    return @strend
    go
    --查询
    select F1,dbo.f_1(F1) from YouTable
      

  3.   

    create table ff
    (f1 varchar (5),f2 varchar (5))insert into ff
    select 'a','c' union
    select 'a','d' union
    select 'a','e' union
    select 'b','f' union
    select 'b','g' union
    select 'b','h'create function f_str(
    @f1 varchar(10)
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+f2 from ff where f1=@f1
    return(stuff(@r,1,1,''))
    endselect f1,f2=dbo.f_str(f1) from ff group by f1f1      f2
    --      -----
    a c,d,e
    b f,g,h
      

  4.   


    --用一条sql语句实现(实际是没有一条sql语句实现的,这里是取巧)
    exec('set nocount on
    select f1,f2=cast(f2 as varchar(8000)) into #t from tb order by f1
    declare @f1 varchar(10),@r varchar(8000)
    update #t set @r=case f1 when @f1 then @r+'',''+f2 else f2 end,f2=@r,@f1=f1
    select F1,F2=max(f2) from #t group by f1
    ')
      

  5.   

    --示例--示例数据
    create table tb(F1 varchar(10),F2 varchar(10))
    insert tb select 'a','c'
    union all select 'a','d'
    union all select 'a','e'
    union all select 'b','f'
    union all select 'b','g'
    union all select 'b','h'
    go--用一条sql语句实现(实际是没有一条sql语句实现的,这里是取巧)
    exec('set nocount on
    select f1,f2=cast(f2 as varchar(8000)) into #t from tb order by f1
    declare @f1 varchar(10),@r varchar(8000)
    update #t set @r=case f1 when @f1 then @r+'',''+f2 else f2 end,f2=@r,@f1=f1
    select F1,F2=max(f2) from #t group by f1
    ')
    go--删除测试
    drop table tb/*--测试结果F1         F2                 
    ---------- -------------------
    a          c,d,e
    b          f,g,h
    --*/
      

  6.   

    请问用一条sql语句怎么实现?不可以吧,要用游标
      

  7.   

    我只能用标准的sql,sql server的特殊方法不行,还有其他办法么