table:
create table userhits (
    userid int NOT NULL,,
    ip     varchar(60) NOT NULL,
    hits   int NOT NULL
)
insert into userhits (userid, ip, hits) values (1, 192.168.1.1, 2)
insert into userhits (userid, ip, hits) values (1, 192.168.1.2, 2)
insert into userhits (userid, ip, hits) values (2, 192.168.1.3, 1)
insert into userhits (userid, ip, hits) values (3, 192.168.1.4, 3)想输出以下格式的数据
userid   ip                                hits
1       192.168.1.1 , 192.168.1.2          4
2       192.168.1.3                        1
3       192.168.1.4                        3请教如何比较简单地用sql写出上面的数据?

解决方案 »

  1.   

    create table userhits (
        userid int NOT NULL,
        ip     varchar(60) NOT NULL,
        hits   int NOT NULL
    )
    insert into userhits (userid, ip, hits) values (1, '192.168.1.1', 2)
    insert into userhits (userid, ip, hits) values (1, '192.168.1.2', 2)
    insert into userhits (userid, ip, hits) values (2, '192.168.1.3', 1)
    insert into userhits (userid, ip, hits) values (3, '192.168.1.4', 3)
    go--写一个聚合函数:
    create function dbo.fn_Merge(@F1 int)
    returns varchar(8000)
    as
    begin
       declare @r varchar(8000)
       set @r=''
       select @r=@r+','+ip from userhits where userid=@F1
       return stuff(@r,1,1,'')
    end
    go-- 调用函数
    select userid, dbo.fn_Merge(userid) as ip,hits=sum(hits)
    from userhits 
    group by userid
    godrop function fn_Merge
    drop table userhits/*
    userip ip                    hits
    -------------------------------------------------
    1 192.168.1.1,192.168.1.2 4
    2 192.168.1.3          1
    3 192.168.1.4          3
    */
      

  2.   

    create table userhits (
        userid int NOT NULL,
        ip     varchar(60) NOT NULL,
        hits   int NOT NULL
    )
    insert into userhits (userid, ip, hits) values (1, '192.168.1.1', 2)
    insert into userhits (userid, ip, hits) values (1, '192.168.1.2', 2)
    insert into userhits (userid, ip, hits) values (2, '192.168.1.3', 1)
    insert into userhits (userid, ip, hits) values (3, '192.168.1.4', 3)
    select min(ip) ip1,case when count(*)>1 then max(ip) else '' end ip2,sum(hits) from userhits group by userid
    ip1                                                          ip2                                                          
    ------------------------------------------------------------ ------------------------------------------------------------ -----------
    192.168.1.1                                                  192.168.1.2                                                  4
    192.168.1.3                                                                                                               1
    192.168.1.4                                                                                                               3(3 行受影响)
      

  3.   

    create table userhits (
        userid int NOT NULL,
        ip     varchar(12) NOT NULL,
        hits   int NOT NULL
    )
    insert into userhits (userid, ip, hits) values (1, '192.168.1.1', 2)
    insert into userhits (userid, ip, hits) values (1, '192.168.1.2', 2)
    insert into userhits (userid, ip, hits) values (2, '192.168.1.3', 1)
    insert into userhits (userid, ip, hits) values (3, '192.168.1.4', 3)
    goselect min(ip) ip1,case when count(*)>1 then max(ip) else '' end ip2,sum(hits) from userhits group by userid
    --结果
    ip1          ip2          
    ------------ ------------ -----------
    192.168.1.1  192.168.1.2  4
    192.168.1.3               1
    192.168.1.4               3(3 行受影响)
      

  4.   

    又忘写userid了。
    create table userhits (
        userid int NOT NULL,
        ip     varchar(12) NOT NULL,
        hits   int NOT NULL
    )
    insert into userhits (userid, ip, hits) values (1, '192.168.1.1', 2)
    insert into userhits (userid, ip, hits) values (1, '192.168.1.2', 2)
    insert into userhits (userid, ip, hits) values (2, '192.168.1.3', 1)
    insert into userhits (userid, ip, hits) values (3, '192.168.1.4', 3)
    goselect userid,min(ip) ip1,case when count(*)>1 then max(ip) else '' end ip2,sum(hits) from userhits group by userid
    --结果
    userid      ip1          ip2          
    ----------- ------------ ------------ -----------
    1           192.168.1.1  192.168.1.2  4
    2           192.168.1.3               1
    3           192.168.1.4               3(3 行受影响)
      

  5.   

    to hrb2008() :
    一个userid可能有很多个ip,不是只有两个。
    不过还是谢谢你,提供了一种思路给我。to gc_ding(施主,给个妞泡好么):
    谢谢,我测试一下
      

  6.   

    gc_ding(施主,给个妞泡好么)的正确
    2000下要用函数对多行字符串进行合并处理.