在数据库中查询出id相同的记录3条,求一函数,将此3条记录,合并成一条记录输出,主要是在页面上显示sender(发送者),reciver(接收者,接收者为多人)。
比如:msgid   sender    reciver
      1       1069      1071
      1       1069      1069 
      1       1069      1080   

解决方案 »

  1.   

    sql2005--建立测试环境
    set nocount on
    create table test(msgid varchar(20),sender varchar(20),reciver varchar(20))
    insert into test select '1','1069','1071'
    insert into test select '1','1069','1069'
    insert into test select '1','1069','1080'
    go
    --测试
    select * from test
    SELECT *
    FROM(
        SELECT DISTINCT 
            sender
        FROM test
    )A OUTER APPLY(
        SELECT reciver= STUFF(REPLACE(REPLACE((
                    SELECT reciver FROM test N
                    WHERE sender = A.sender
                    FOR XML AUTO), '<N reciver="', ','), '"/>', ''), 1, 1, '')
    )N
     
    --删除测试环境
    drop table test
     set nocount off
      

  2.   

    sql2000--建立测试环境
    set nocount on
    create table test(msgid varchar(20),sender varchar(20),reciver varchar(20))
    insert into test select '1','1069','1071'
    insert into test select '1','1069','1069'
    insert into test select '1','1069','1080'
    go
    --测试
     CREATE FUNCTION get_recivers(@sender varchar(10))
    RETURNS varchar(8000)
    AS
    BEGIN
    DECLARE @r varchar(8000)
    SET @r=''
    SELECT @r=@r+','+reciver FROM test WHERE sender=@sender 
    RETURN(substring(@r,2,8000))
    END
    GO
    select sender,dbo.get_recivers(sender)   from test group by sender--删除测试环境
    drop table test
    drop function get_recivers
     set nocount off
      

  3.   


    create function  dbo.getreciver(@msgid int,@sender varchar(8))
    returns varchar(200)
    as
    begin
    declare @reciver varchar(200)
    set @reciver=''
    select @reciver=@reciver+reciver+',' from tablename where msgid=@msgid and sender=@sender
    if @reciver<>'' set @reciver=left(@reciver,len(@reciver)-1)
    return @reciver
    end