我的数据库结构是这样的
      SRCIP       EVENTCOUNT     EVENTLEVEL     EVENTTIME
   192.168.2.1      12313           0          03-1-2-08-34
   192.168.2.34      35             1          03-1-2-08-45
   192.168.2.1       34             1          03-1-2-09-01
   192.168.2.1       23             2          03-1-2-09-10
   192.168.2.56      34             1          03-1-2-09-14
   192.168.2.34       5             1          03-1-2-09-45
      ......          ..            ..           .......
   192.168.2.34       5             1          03-1-3-01-23
其中,EVENTLEVEL只有三个值0,1,2代表低级、中级、高级事件
现在的目的是要对这些事件进行归并,统计出一天时间范围内的高、中、低事件数来
生成如下的记录:
    SRCIP     LEVEL_HIGH_COUNT    LEVEL_MID_COUNT   LEVEL_LOW_COUNT
  192.168.2.1       23                   34             12313
  192.168.2.34      0                    45                0
           ...................................................
  请问这样的SQL应该怎么写?允许利用中间临时表,分两步完成
   
 

解决方案 »

  1.   

    select SRCIP,
    sum(decode(EVENTLEVEL,2,1,0)LEVEL_HIGH_COUNT
    sum(decode(EVENTLEVEL,1,1,0)LEVEL_MID_COUNT
    sum(decode(EVENTLEVEL,0,1,0)LEVEL_LOW_COUNT
    from your_table
    group by SRCIP
      

  2.   

    sorry,括号少了:
    select SRCIP,
    sum(decode(EVENTLEVEL,2,1,0))LEVEL_HIGH_COUNT
    sum(decode(EVENTLEVEL,1,1,0))LEVEL_MID_COUNT
    sum(decode(EVENTLEVEL,0,1,0))LEVEL_LOW_COUNT
    from your_table
    group by SRCIP
      

  3.   

    Sorry,请问,这中间为什么没有出现EVENTCOUNT字段?
    没有这个字段如何求其和呢?
      

  4.   

    jiezhi(西域浪子):
    我是要对EVENTCOUNT求和,而不是EVENTLEVEL的翻译,是不是我们理解有所出入.
    十分感谢你的建议,等解决了问题我马上给你加分.:)
      

  5.   

    稍微改一下就可以了。select SRCIP,
    sum(decode(EVENTLEVEL,2,EVENTCOUNT,0)) LEVEL_HIGH_COUNT,
    sum(decode(EVENTLEVEL,1,EVENTCOUNT,0)) LEVEL_MID_COUNT,
    sum(decode(EVENTLEVEL,0,EVENTCOUNT,0)) LEVEL_LOW_COUNT
    from your_table
    group by SRCIP
      

  6.   

    我试试看,不知道相同方法能否用在SQL Server2000中?
      

  7.   

    可以,不过SQL SERVER2000没有decode函数,可以用case when 来代替。