问题描述
月份 区县 客户等级 拍照等级       实际离网数  总记录数 离网率 (实际离网/总记录数)
200812 安义县 省拍照           3
200812 安义县 省拍照0803 2
200812 安义县 南昌拍照客户 28
200812 安义县 银卡          2
200812 昌北区 省拍照          29
200812 昌北区 省拍照0803 10
200812 昌北区 南昌拍照客户 98
200812 昌北区 银卡           2
200812 东湖区 省拍照          48
200812 东湖区 省拍照0803 29
我有一个基表,都是关于客户的区县,客户等级,拍照等级 等的记录,我现在要统计上面这些。可是我后面的总记录数不知道怎么统计。这是我的sql:
SELECT TO_CHAR(SYSDATE, 'yyyymm') 月份,
       C.COUNTY_NAME 区县,
       D.CLASS_NAME 客户等级,
       E.PAIZHAO_NAME 拍照等级,
       COUNT(*) 实际离网
  FROM ALL_CM_USER         B,
       MB_NC_MAINCUST      A,
       JH_SV_COUNTY        C,
       MB_SV_CLASS         D,
       MB_SV_PAIZHAO_CLASS E 
 WHERE B.SERV_ID = A.SERV_ID --
   AND B.USER_STS <> 1       --这是要在总数统计的时候要去掉的条件
   AND A.QZ_CLASS = E.PAIZHAO_ID(+)
   AND A.AREA = C.COUNTY_ID(+)
   AND A.CUST_CLASS = D.CUST_CLASS(+)
 GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME
其实我的问题很明白,简单说就是我先在一些条件下统计出记录数(实际离网数), 然后去掉某个条件,再统计出总记录数,要在一条sql里实现。废话太多了,希望大家帮忙

解决方案 »

  1.   

    其实我的问题很明白,简单说就是我先在一些条件下统计出记录数(实际离网数), 然后去掉某个条件,再统计出总记录数,要在一条sql里实现。废话太多了,希望大家帮忙
      

  2.   

    不用贴你的SQL,你只要贴数据,然后结果数据?就可以,这样子说别人会更容易明白!
      

  3.   

    下面是不是你想要的:SELECT TO_CHAR(SYSDATE, 'yyyymm') 月份,
           C.COUNTY_NAME 区县,
           D.CLASS_NAME 客户等级,
           E.PAIZHAO_NAME 拍照等级,
           COUNT(*) 总记录数,
           SUM(DECODE(B.USER_STS,1,0,1))  实际离网数,
           SUM(DECODE(B.USER_STS,1,0,1))/COUNT(*) 离网率      -- 这里如果考虑精度的话,加上round函数。 
      FROM ALL_CM_USER         B,
           MB_NC_MAINCUST      A,
           JH_SV_COUNTY        C,
           MB_SV_CLASS         D,
           MB_SV_PAIZHAO_CLASS E
     WHERE B.SERV_ID = A.SERV_ID -- 
       --AND B.USER_STS <> 1 --这是要在总数统计的时候要去掉的条件 
       AND A.QZ_CLASS = E.PAIZHAO_ID(+)
       AND A.AREA = C.COUNTY_ID(+)
       AND A.CUST_CLASS = D.CUST_CLASS(+)
     GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME
      

  4.   

    看看是否符合你的要求:
    select TO_CHAR(SYSDATE, 'yyyymm') 月份,
           b.COUNTY_NAME 区县,
           b.CLASS_NAME 客户等级,
           b.PAIZHAO_NAME 拍照等级,
           nvl(a.real_cnt,0) 实际离网数,
           a.tot_cnt 总记录数 ,
           round(decode(a.tot_cnt,0,0,nvl(a.real_cnt,0) / a.tot_cnt),2) 离网率
    from        
    (SELECT C.COUNTY_NAME ,
           D.CLASS_NAME ,
           E.PAIZHAO_NAME ,
           SUM(DECODE(B.USER_STS,1,0,1))  real_cnt,    
      FROM ALL_CM_USER         B,
           MB_NC_MAINCUST      A,
           JH_SV_COUNTY        C,
           MB_SV_CLASS         D,
           MB_SV_PAIZHAO_CLASS E
     WHERE B.SERV_ID = A.SERV_ID 
       AND B.USER_STS <> 1   
       AND A.QZ_CLASS = E.PAIZHAO_ID(+)
       AND A.AREA = C.COUNTY_ID(+)
       AND A.CUST_CLASS = D.CUST_CLASS(+)
     GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME) a,
    (SELECT C.COUNTY_NAME ,
           D.CLASS_NAME ,
           E.PAIZHAO_NAME ,
           SUM(DECODE(B.USER_STS,1,0,1))  tot_cnt,    
      FROM ALL_CM_USER         B,
           MB_NC_MAINCUST      A,
           JH_SV_COUNTY        C,
           MB_SV_CLASS         D,
           MB_SV_PAIZHAO_CLASS E
     WHERE B.SERV_ID = A.SERV_ID  
       AND A.QZ_CLASS = E.PAIZHAO_ID(+)
       AND A.AREA = C.COUNTY_ID(+)
       AND A.CUST_CLASS = D.CUST_CLASS(+)
     GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME) b
    where b.county_name = a.county_name(+)
    and b.class_name = a.class_name(+)
    and b.paizhao_name = a.paizhao_name(+)