语句
select t1.Item_date, nvl(v2,0) as "2G用户数", v1 as "总用户数",
case v1 when 0 then '无'
else
case nvl(v2,0) when 0 then '0.00%'
else to_char(round(v2*100/v1,2),'FM9999999999999999.00')||'%'
end
end as "百分比"
from
(select Item_Date,value v1
from STAT_ITEM_DATA where Item_id=10010001 and extend_field1=19
) t1
,
(select Item_Date,value v2
from STAT_ITEM_DATA where Item_id=10010002 and extend_field1=19
) t2
where t1.ITEM_DATE = t2.ITEM_DATE(+)
order by Item_Date
测试结果
逐个解决
- 指标在同一张表里面,需要用子查询分别选出,用日期进行关联。
- 总用户数指标存在,但是分子指标不存在的日期,关联需要用(+),并且取值从空改为0,也就是用nvl(空值,0)。
- 用 case 避免分母为0还进行除法。
- 用 to_char(round(分子*100/分母,保留小数几位),‘FM9999999999999999.00’)||’%’ 来格式化百分比显示(当然还有很多其它的办法,这里只是一种)。
- 再用 case 避免分子为0时,百分比格式不正确的问题。
- 不知道还有别的问题么……?