select calling_device as cd,dnis_area as da, answer_duration as ad,count(*) as cnt from call_master   group by calling_device,dnis_area,answer_duration得出第三列的值的意义在于区分大于0和等于0,数字并无意义;第四列cnt为合计列cd      da      as      cnt6003 2 0 1
6006 3 7898 1
8001 0 0 1
8001 0 11 1
8001 0 32 1
8001 0 33 1
8001 0 36 1
8001 0 38 2
8001 2 0 1
8001 3 432 1
8001 3 456 1
8001 3 8789 1
8001 4 343 1
8001 4 879 1
8002 0 145 1能否区分第三列 区分为=0 和>0 第四列则变成合计分组前两列后 根据第三列=0或是>0计算合计多少条记录即 sql结果变成cd      da      as      cnt6003 2 =0 1
6006 3 >0 1
8001 0 =0 1
8001 0 >0 6
8001 2 =0 1
8001 3 >0 3
8001 4 >0      2
8002 0 >0 1

解决方案 »

  1.   

    select 
    cd,da,case when ad>0 then '>0' when ad=0 then '=0' end ad,
    sum(cnt) cnt
    from 
    (
    select   calling_device   as   cd,dnis_area   as   da,   answer_duration   as   ad,count(*)   as   cnt   from   call_master       group   by   calling_device,dnis_area,answer_duration 
    )a
    group by cd,da,ad
      

  2.   


    上面敲错了。不好意思:
    应该是
    select 
    cd,da,case when ad>0 then '>0' when ad=0 then '=0' end ad,
    sum(cnt) cnt
    from 
    (
    select   calling_device   as   cd,dnis_area   as   da,   answer_duration   as   ad,count(*)   as   cnt   from   call_master       group   by   calling_device,dnis_area,answer_duration 
    )agroup by cd,da,case when ad>0 then '>0' when ad=0 then '=0' end