当前位置: 代码迷 >> Oracle技术 >> Oracle 统计有关问题
  详细解决方案

Oracle 统计有关问题

热度:331   发布时间:2016-04-24 08:41:28.0
Oracle 统计问题
一个关于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脚本最好可以一条脚本搞定,谢谢

------解决方案--------------------
SQL code
------莫非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         211234567890            1          2          1          3          5             12           21         21SQL>
  相关解决方案