今天碰巧开发一张统计报表,统计电话转接的成功率和用户满意度:
表结构如下:
create table t_transfer_log_list
(logid varchar2(40)primary key,
transfer_result varchar2(1) , -- 1转接成功 ,其他转接不成功
user_satisfied varchar2(1), -- null 或 0 满意 1 不满意
other varchar2(100)
)
现统计转接成功次数和用户满意次数,原始sql如下:
select sum(case transfer_result when '1' then 1 else 0) as trans_sucs,
sum(case nvl(user_satisfied,'0') when '0' then 1 else 0 ) as
user_satisfied from
t_transfer_log_list;
统计结果居然出现用户满意数大于转接成功次数,寻求原因原来是有些转接失败的记录的user_satisfied 字段为空,也统计为用户满意(业务规则),修改统计过程如下,使用了一个decode方法:
select sum(case transfer_result when '1' then 1 else 0) as trans_sucs,
sum(case decode(transfer_result,'1','1','0')||nvl(user_satisfied,'0') when '10' then 1 else 0 ) as
user_satisfied from
t_transfer_log_list;
结果OK。。。。