--不能一句select搞定,得建一个函数
create   function f_try(@value varchar(100))
returns varchar(1000)
as
begin
declare @a varchar(1000)
set @a=''
select @a=@a+','+field2
from 表名
where field1=@value
return(stuff(@a,1,1,''))
end--查询:
select distinct field1,field2=dbo.f_try(field1) from 表名

解决方案 »

  1.   

    --一句搞不定
    --一个自定义函数+一句可以--处理的自定义函数
    create function f_str(
    @field1 varchar(10)
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=''
    select @r=@r+','+rtrim(field2) from 表 where field1=@field1
    return(stuff(@r,1,1,''))
    end
    go--调用实现查询
    select field1,field2=dbo.f_str(field1) from 表 group by field1
      

  2.   

    create function catstr(@field1 as varchar(3))
    returs varchar(100)
    as
    begin
      declare @ts 
      select @ts=@ts+','+field2 from 表 where field1=@field1
      set @ts=stuff(@ts,1,1,'')
      return @ts
    endselect field1,dbo.catstr(field1) from 表 group by field1
      

  3.   

    我也来一个
    create   function f_try(@value varchar(100))
    returns varchar(1000)
    as
    begin
    declare @a varchar(1000)
    set @a=''
    select @a=@a+','+field2
    from 表名
    where field1=@value
    set @a=left(@a,len(@a)-1)
             return(@a)
    end--查询:
    select distinct field1,field2=dbo.f_try(field1) from 表名
      

  4.   

    答案都正确,都达到想要的效果,不过还是有点不明白
    create  function  f_str(  
    @field1  varchar(10)  
    )returns  varchar(8000)  
    as  
    begin  
               declare  @r  varchar(8000)  
               set  @r=''  
               select  @r=@r+','+rtrim(work_no)  from  appoint  where  bill_id=@field1  
               select @r
               return(stuff(@r,1,1,''))  
    end  
    go  
     
    --调用实现查询  
    select  bill_id,work_no=dbo.f_str(bill_id)  from  appoint  group  by  bill_id
    1,为什么select  @r=@r+','+rtrim(work_no)  from  appoint  where  bill_id=@field1 返回的是“aaa,bbb,ccc”而不是

    ,aaa
    ,bbb
    ,ccc
    ”2,当我调用select  bill_id,work_no=dbo.f_str(bill_id)  from  appoint  group  by bill_id的时候,@field1代表什么?
      

  5.   

    1.stuff这个function.
       删除指定长度的字符并在指定的起始点插入另一组字符。语法
    STUFF ( character_expression , start , length , character_expression ) 参数
    character_expression由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。start是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。length是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符
    ---------------------------------------------
    2.@field1表示f_str这个函数中的形参.