17,090
社区成员
发帖
与我相关
我的任务
分享
l_status := trim(both chr(13) from status);
l_status := trim(both chr(10) from l_status);
create or replace function statusToDec(
status in varchar2
) return number
IS
l_dec number;
l_status varchar2(20);
begin
l_status := trim(both chr(13) from status);
l_status := trim(both chr(10) from status);
l_dec := 0;
if l_status = '优' then l_dec := 1;
elsif l_status = '良' then l_dec := 2;
elsif l_status = '轻微污染' then l_dec := 3;
elsif l_status = '轻度污染' then l_dec := 4;
elsif l_status = '中度污染' then l_dec := 5;
elsif l_status = '中度重污染' then l_dec := 6;
elsif l_status = '重度污染' then l_dec := 7;
elsif l_status = '重污染' then l_dec := 8;
end if;
return l_dec;
end statusToDec ;
select tt.* from
(select to_char(t.oper_date,'yyyy') year,
sum(
decode(
sign(statusToDec(t.status)-1),-1,1,0
)
) betterDay
,
floor((sum(
decode(
sign(statusToDec(t.status)-1),-1,1,0
)
)/365)*100)||'%' betterPercent
,
sum(
decode(
sign(statusToDec(t.status)-1),1,1,0
)
) badDay
,
floor((sum(
decode(
sign(statusToDec(t.status)-1),1,1,0
)
)/365)*100)||'%' badPercent
,
sum(
decode(
sign(statusToDec(t.status)-1),0,1,0
)
) equalDay
,
floor((sum(
decode(
sign(statusToDec(t.status)-1),0,1,0
)
)/365)*100)||'%' equalPercent
from city_day t
where t.city='长沙'
group by to_char(t.oper_date,'yyyy')
) tt