一个关于Oracle统计的问题,还望高手给出解决方案,谢谢:
原始数据以及表结构:用户手机号 积分值 积分类型 积分日期
1234567890 1 1 2010-12-27
1234567890 2 2 2010-12-27
1234567890 1 3 2010-12-27
1234567890 3 4 2010-12-27
1234567890 5 5 2010-12-27
1234567890 1 3 2010-12-23
1234567890 3 4 2010-12-23
1234567890 5 5 2010-12-23需求:     提取当天不同类型积分的总值,
                                格式如下:     用户手机号码  1积分值 2积分值 3积分值 4积分值 5积分值 当天总积分值     提取当月的不同类型的积分值
                                格式如下:     用户手机号码  1积分值 2积分值 3积分值 4积分值 5积分值 当月总积分值
     提取当月的不同类型的积分值
                                格式如下:     用户手机号码  1积分值 2积分值 3积分值 4积分值 5积分值 总积分值
    最希望个格式如下:
             
     用户手机号码  1积分值 2积分值 3积分值 4积分值 5积分值 当天累计积分值   当月总积分值 总积分值 
以上Sql脚本最好可以一条脚本搞定,谢谢

解决方案 »

  1.   


    ------莫非lz抖了3下,菜鸟来接分哈呵呵
    SQL> 
    SQL> with tablea as
      2  (
      3  select '1234567890' msn,1 j_value, 1 j_type, date '2010-12-27' j_date from dual union all
      4  select '1234567890' msn,2 j_value, 2 j_type, date '2010-12-27' j_date from dual union all
      5  select '1234567890' msn,1 j_value, 3 j_type, date '2010-12-27' j_date from dual union all
      6  select '1234567890' msn,3 j_value, 4 j_type, date '2010-12-27' j_date from dual union all
      7  select '1234567890' msn,5 j_value, 5 j_type, date '2010-12-27' j_date from dual union all
      8  select '1234567890' msn,1 j_value, 3 j_type, date '2010-12-23' j_date from dual union all
      9  select '1234567890' msn,3 j_value, 4 j_type, date '2010-12-23' j_date from dual union all
     10  select '1234567890' msn,5 j_value, 5 j_type, date '2010-12-23' j_date from dual
     11  )
     12  select msn 用户手机号码,
     13         max(decode(j_type, 1, j_value)) 积分值一,
     14         max(decode(j_type, 2, j_value)) 积分值二,
     15         max(decode(j_type, 3, j_value)) 积分值三,
     16         max(decode(j_type, 4, j_value)) 积分值四,
     17         max(decode(j_type, 5, j_value)) 积分值五,
     18         dvalue 当天累计积分值,
     19         mvalue 当月总积分值,
     20         tvalue 总积分值
     21    from (select msn,
     22                 j_value,
     23                 j_type,
     24                 j_date,
     25                 sum(j_value) over(partition by trunc(j_date) order by 1) dvalue,
     26                 sum(j_value) over(partition by trunc(j_date, 'mm') order by 1) mvalue,
     27                 sum(j_value) over(order by 1) tvalue
     28            from tablea)
     29   group by msn, dvalue, mvalue, tvalue
     30  ;用户手机号码   积分值一   积分值二   积分值三   积分值四   积分值五 当天累计积分值 当月总积分值   总积分值
    ------------ ---------- ---------- ---------- ---------- ---------- -------------- ------------ ----------
    1234567890                                  1          3          5              9           21         21
    1234567890            1          2          1          3          5             12           21         21SQL> 
      

  2.   

    SELECT T.MOBILE_NO AS MOBILENO,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '1', T.MOBILE_NO)) NUMBER_FOR_1,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '2', T.MOBILE_NO)) NUMBER_FOR_2,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '3', T.MOBILE_NO)) NUMBER_FOR_3,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '4', T.MOBILE_NO)) NUMBER_FOR_4,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '5', T.MOBILE_NO)) NUMBER_FOR_5,
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '1', T.MOBILE_NO)) +
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '2', T.MOBILE_NO)) +
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '3', T.MOBILE_NO)) +
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '4', T.MOBILE_NO)) +
           COUNT(DECODE(TRUNC(T.SCORE_TYPE), '5', T.MOBILE_NO)) NUMBER_FOR_sum
      FROM CMREAD_USER_SCORE_DETAIL T
     WHERE T.UPADTE_DATE = TO_DATE('2010-12-27', 'YYYY-MM-DD')
     GROUP BY T.MOBILE_NO123456789 1 1 1 1 1 5