一个关于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脚本最好可以一条脚本搞定,谢谢
原始数据以及表结构:用户手机号 积分值 积分类型 积分日期
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>
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>
select 1234567890 tel, 1 score, 1 ty, '2010-12-27' dt from dual union all
select 1234567890, 2, 2, '2010-12-27' from dual union all
select 1234567890, 1, 3, '2010-12-27' from dual union all
select 1234567890, 3, 4, '2010-12-27' from dual union all
select 1234567890, 5, 5, '2010-12-27' from dual union all
select 1234567890, 1, 3, '2010-12-23' from dual union all
select 1234567890, 3, 4, '2010-12-23' from dual union all
select 1234567890, 5, 5, '2010-12-23' from dual
)select tel,dt,
sum(decode(ty,1,score,0)) score1,
sum(decode(ty,2,score,0)) score2,
sum(decode(ty,3,score,0)) score3,
sum(decode(ty,4,score,0)) score4,
sum(decode(ty,5,score,0)) score5,
sum(score) score_day,
sum(sum(score)) over(partition by tel,substr(dt,1,7)) score_mon,
sum(sum(score)) over(partition by tel,substr(dt,1,7)) score_tol
from t_test
group by tel,dt 把dt转换成时间就可以了
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_NO