--建函数
Create function F_Getstr(@num varchar(10))
retruns varchar(2000)
as 
begin
     Declare @s varchar(2000)
     set @s=''
     select @s=@s+','+string+'' from 表1 where num=@num
     set @s=stuff(@s,1,1)
     return @s
end--查询 
select num,string=dbo.F_Getstr(num)
from 表1
group by num

解决方案 »

  1.   

    好像不行啊 服务器: 消息 102,级别 15,状态 1,过程 F_Getstr,行 2
    在 'retruns' 附近有语法错误。
    服务器: 消息 174,级别 15,状态 1,过程 F_Getstr,行 8
    stuff 函数要求有 4 个参数。
      

  2.   

    -测试环境
    create table 表1(id int identity(1,1),num varchar(10),string varchar(10))
    insert into 表1 select 'G123','abc'
    union all select 'H456','abc'
    union all select 'G123','abc'
    union all select 'K789','xyz'
    union all select 'H456','xyz'
    union all select 'K789','xyz'
    --函数
    Create function F_Getstr(@num varchar(10))
    returns varchar(2000)
    as 
    begin
         Declare @s varchar(2000)
         set @s=''
         select @s=@s+','+T.string+'' from (select distinct string from  表1 where num=@num) T
         set @s=stuff(@s,1,1,'')
         return @s
    end--查询select 
    num,string=dbo.F_Getstr(num)
    from 表1 A
    group by num--结果
    num        string  
    ----- -----------
    G123       abc
    H456       abc,xyz
    K789       xyz
      

  3.   

    --忘了给你加ID了
    --查询
    select ID=(select sum(1) from 
    (select 
    num,string=dbo.F_Getstr(num)
    from 表1 
    group by num
    ) T where T.num+'_'+T.string<=A.num+'_'+A.string)
    ,* from (select 
    num,string=dbo.F_Getstr(num)
    from 表1 
    group by num
    ) A--结果
    line        num        string   
    --------     ------    ---------
    1           G123       abc
    2           H456       abc,xyz
    3           K789       xyz删除测试环境
    Drop table 表1
    Drop Function F_Getstr
      

  4.   

    对了,zlp321002(飘过)兄,结果怎么存到table2中呢?
      

  5.   

    --table2 中有表结构吗??
    什么表结构啊??
      

  6.   

    有啊,就是要另存过去的
    结构是这样的
    id     bigint  8   标识
    num    varchar 50
    string varchar 50再帮帮忙吧^^
      

  7.   

    --我晕,你还有一个标识列啊!
    --那就更简单了!insert table2 
    select 
    num,string=dbo.F_Getstr(num)
    from 表1 
    group by num
      

  8.   

    还是不行啊,再帮帮忙吧服务器: 消息 8101,级别 16,状态 1,行 1
    仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'table2' 中为标识列指定显式值。
      

  9.   

    在插入之前 set identity_insert on
      

  10.   

    --指定字段
    create table #T(id bigint identity(1,1),
    num varchar(50),
    string varchar(50)
    )insert into #T(num,string)
    select 
    num,
    string=dbo.F_Getstr(num)
    from 表1 
    group by num--查询
    select * from #T
      

  11.   

    我明白啦,多谢zlp321002(飘过)兄,结贴^^