不好意思,文中TermID,表示DataTable表的ID列

解决方案 »

  1.   

    我都不想用in,不知道有什么好的办法?in效率不高,我知道,不好意思啊,是有点乱!
    ---------
    关键的问题是,还需要排序,不知道大家怎么想呢?给我个思路吧。我有用【存储过程分页】,但是这样查询出来的不是表,不能分页,于是我想创建临时表用作分页和排序,
    但是这临时表怎么插入数据呢?如果要按上面的方式,我查询的时候,速度会下降的。
      

  2.   


    嗯,好的。我写在后面。------------------------------------------------
    /**
    表1
    编号1      IP        用户     终端          日期1                    日期2
    1 218.18.189.127 00001 00e08141fbEf 2009-06-08 17:10:47.997 2009-06-08 17:10:47.997
    2 218.15.120.190 00001 000B2F0AC6D0 2009-06-09 12:43:15.060 2009-06-09 12:22:56.000
    3 58.251.125.158 00002 000c29fb4ba3 2009-06-10 14:12:47.700 2009-06-09 18:21:01.000
    4 58.251.125.158 00002 002127aa6dce 2009-06-10 07:33:07.607 2009-06-10 07:33:07.607
    5 219.134.37.66 00002 005056C00001 2009-06-12 09:38:14.167 2009-06-08 10:17:16.000
    6 218.75.3.18     00003 00e08101fbd9 2009-06-11 12:38:37.327 2009-06-11 12:38:23.000
    7 222.208.6.55 00004 00e08101fb3f 2009-06-11 13:01:28.597 2009-06-08 17:16:04.000
    8 202.98.153.162 00005 00016cbb07ab 2009-06-11 19:46:59.273 2009-06-11 14:04:33.000
    9 202.98.153.171 00005 0004614b132b 2009-06-11 17:52:12.790 2009-06-10 21:36:54.000
    10 202.98.153.171 00001 000461769e41 2009-06-11 21:14:13.853 2009-06-10 14:08:03.000
    ----------------------------------------------------
    表2
    标识 编号1 数据编号   次数   日期3
    1 1 1 3 2009-06-06 17:20:57.873
    2 1 1    31 2009-06-07 17:20:03.077
    3 3 1    19 2009-06-07 17:20:21.653
    4 5 1    43 2009-06-06 17:20:08.670
    5 5 2 1 2009-06-06 17:20:11.857
    6 6 2 2 2009-06-06 17:20:44.123
    7 8 2 1 2009-06-06 17:20:32.200
    8 8 2    11 2009-06-12 17:20:52.200
    9 9 2 1 2009-06-06 17:21:03.687
    10 5 2     5 2009-06-14 17:21:04.263表2的【编号1】和表1的【编号1】是关联的
    -----------------------------
    现在要查询出:用户,count(distinct(IP)) as SumIP,count(distinct(终端))as SumMac,数据编号1,数据编号2
    00001   3                       3                 34                         0
    00002   2                       3                  62                        6
    00003   1                       1                  0                         2
    00004   1                       1                  0                         0
    00005   2                       2                  0                         12
    **/
    各位帮帮忙!
      

  3.   


    嗯,好的。我写在后面。------------------------------------------------
    /**
    表1
    编号1            IP               用户               终端                    日期1                      日期2
    1    218.18.189.127    00001 00e08141fbEf      2009-06-08 17:10:47.997       2009-06-08 17:10:47.997
    2    218.15.120.190    00001 000B2F0AC6D0      2009-06-09 12:43:15.060       2009-06-09 12:22:56.000
    3    58.251.125.158    00002 000c29fb4ba3      2009-06-10 14:12:47.700       2009-06-09 18:21:01.000
    4    58.251.125.158    00002 002127aa6dce      2009-06-10 07:33:07.607       2009-06-10 07:33:07.607
    5    219.134.37.66    00002 005056C00001      2009-06-12 09:38:14.167       2009-06-08 10:17:16.000
    6    218.75.3.18           00003         00e08101fbd9      2009-06-11 12:38:37.327       2009-06-11   12:38:23.000
    7    222.208.6.55           00004         00e08101fb3f      2009-06-11 13:01:28.597       2009-06-08 17:16:04.000
    8       202.98.153.162   00005         00016cbb07ab      2009-06-11 19:46:59.273       2009-06-11 14:04:33.000
    9    202.98.153.171   00005         0004614b132b      2009-06-11 17:52:12.790       2009-06-10 21:36:54.000
    10    202.98.153.171   00001         000461769e41      2009-06-11 21:14:13.853       2009-06-10 14:08:03.000
    ----------------------------------------------------
    表2
    标识        编号1         数据编号                    次数              日期3
    1         1 1 3    2009-06-06 17:20:57.873
    2     1 1        31    2009-06-07 17:20:03.077
    3     3 1        19    2009-06-07 17:20:21.653
    4     5 1        43    2009-06-06 17:20:08.670
    5     5 2 1     2009-06-06 17:20:11.857
    6     6 2 2    2009-06-06 17:20:44.123
    7     8 2 1    2009-06-06 17:20:32.200
    8     8 2        11    2009-06-12 17:20:52.200
    9     9 2 1    2009-06-06 17:21:03.687
    10     5 2        5    2009-06-14 17:21:04.263表2的【编号1】和表1的【编号1】是关联的
    -----------------------------
    现在要查询出:用户,count(distinct(IP)) as SumIP,count(distinct(终端))as SumMac,数据编号1,数据编号2
    00001   3                       3                 34                         0
    00002   2                       3                  62                        6
    00003   1                       1                  0                         2
    00004   1                       1                  0                         0
    00005   2                       2                  0                         12
    **/
    各位帮帮忙!有筛选条件的,根据用户,日期1,日期3等为条件查询
    我写的是,用户,count(distinct(IP)) as SumIP,count(distinct(终端))as SumMacfrom TerminalInfo group by 用户,可以得到结果,但是少了2列,我要把数据编号1,数据编号2都查询出来。
    各位帮帮忙。
    不知道上面的怎么就歪了,没有对齐,现在重新写了下。CSDN怎么没有预览功能的..
      

  4.   

    declare @t table(编号1 int,IP varchar(20),用户 varchar(10),终端 varchar(20),日期1 datetime,日期2 datetime)
    insert @t 
    select 1, '218.18.189.127',  '00001', '00e08141fbEf',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 2, '218.15.120.190',  '00001', '000B2F0AC6D0',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 3, '58.251.125.158',  '00002', '000c29fb4ba3',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 4, '58.251.125.158',  '00002', '002127aa6dce',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 5, '219.134.37.66',  '00002', '005056C00001',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 6, '218.75.3.18',  '00003', '00e08101fbd9',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 7, '222.208.6.55',  '00004', '00e08101fb3f',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 8, '202.98.153.162',  '00005', '00016cbb07ab',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 9, '202.98.153.171',  '00005', '0004614b132b',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' union all
    select 10, '202.98.153.171',  '00001', '000461769e41',     '2009-06-08 17:10:47.997',       '2009-06-08 17:10:47.997' declare @t1 table(标识 int,        编号1 int,        数据编号  int,                  次数     int,         日期3 datetime)
    insert @t1
    select 1,        1, 1, 3,   '2009-06-06 17:20:57.873' union all
    select 2,        1, 1, 31,   '2009-06-06 17:20:57.873' union all
    select 3,        3, 1, 19,   '2009-06-06 17:20:57.873' union all
    select 4,        5, 1, 43,   '2009-06-06 17:20:57.873' union all
    select 5,        5, 2, 1,   '2009-06-06 17:20:57.873' union all
    select 6,        6, 2, 2,   '2009-06-06 17:20:57.873' union all
    select 7,        8, 2, 1,   '2009-06-06 17:20:57.873' union all
    select 8,        8, 2, 11,   '2009-06-06 17:20:57.873' union all
    select 9,        9, 2, 1,   '2009-06-06 17:20:57.873' union all
    select 10,        5, 2, 5,   '2009-06-06 17:20:57.873' 
    ;
    with cte1 as
    (
    select t.编号1,tmp1.用户,sumip,sumMac from (select 用户,count(distinct(IP)) as SumIP,  count(distinct(终端))as SumMac from @t t left join @t1 t1 on t.编号1=t1.编号1 group by 用户) tmp1 join @t t on tmp1.用户=t.用户
    ),
    cte2 as
    (
    select c1.用户,sumip,sumMac,数据编号,次数 from cte1 c1 left join @t1  t1 on c1.编号1=t1.编号1
    )
    select 用户,SumIP,SumMac,isnull([1],0) 数据编号1,isnull([2],0) 数据编号2  from cte2
    pivot
    (
      sum(次数) for 数据编号 in([1],[2])
    ) p/*
    用户         SumIP       SumMac      数据编号1       数据编号2
    ---------- ----------- ----------- ----------- -----------
    00001      3           3           34          0
    00002      2           3           62          6
    00003      1           1           0           2
    00004      1           1           0           0
    00005      2           2           0           13(5 行受影响)
    */
      

  5.   

    TO:xiequan2
    --------------
    不好意思,最后的我看不太懂,能不能讲讲?
    select 用户,SumIP,SumMac,isnull([1],0) 数据编号1,isnull([2],0) 数据编号2  from cte2 
    pivot 

      sum(次数) for 数据编号 in([1],[2]) 
    ) p 
    ----------
    这些!
      

  6.   

    Pivot研究:http://hi.baidu.com/ai_li7758521/blog/item/4eecac8632665f3667096efa.html
      

  7.   

    怎么无人来关注了,pivot在sql2000上无法运行的。