一个关于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>