oracle 按半年统计
现在遇到一个oracle统计语句,按半年统计 有id,time字段, time为yyyy-mm-dd的varchar2类型。还有一个是按季度统计,求大神指教。。。 oracle???半年统计
[解决办法]
with t as
(select 1 as id,'2012-01-01' as times from dual
union all
select 2 as id,'2012-02-01' as times from dual
union all
select 3 as id,'2012-03-01' as times from dual
union all
select 4 as id,'2012-04-01' as times from dual
union all
select 5 as id,'2012-06-01' as times from dual
union all
select 6 as id,'2012-07-01' as times from dual
union all
select 7 as id,'2012-08-01' as times from dual
union all
select 8 as id,'2012-09-01' as times from dual
union all
select 9 as id,'2012-10-01' as times from dual
union all
select 11 as id,'2011-01-01' as times from dual
union all
select 12 as id,'2011-02-01' as times from dual
union all
select 13 as id,'2011-03-01' as times from dual
union all
select 14 as id,'2011-04-01' as times from dual
union all
select 15 as id,'2011-06-01' as times from dual
union all
select 16 as id,'2011-07-01' as times from dual
union all
select 17 as id,'2011-08-01' as times from dual
union all
select 18 as id,'2011-09-01' as times from dual
union all
select 19 as id,'2011-10-01' as times from dual)
Select Count(1),dates From (
select id,case when to_char(to_date(times,'yyyy-mm-dd'),'mm')>='06' then to_char(to_date(times,'yyyy-mm-dd'),'yyyy')
[解决办法]
'上半年' else to_char(to_date(times,'yyyy-mm-dd'),'yyyy')
[解决办法]
'下半年' end as dates from t)
group by dates
order by 2;
with t as
(select 1 as id,'2012-01-01' as times from dual
union all
select 2 as id,'2012-02-01' as times from dual
union all
select 3 as id,'2012-03-01' as times from dual
union all
select 4 as id,'2012-04-01' as times from dual
union all
select 5 as id,'2012-06-01' as times from dual
union all
select 6 as id,'2012-07-01' as times from dual
union all
select 7 as id,'2012-08-01' as times from dual
union all
select 8 as id,'2012-09-01' as times from dual
union all
select 9 as id,'2012-10-01' as times from dual
union all
select 11 as id,'2011-01-01' as times from dual
union all
select 12 as id,'2011-02-01' as times from dual
union all
select 13 as id,'2011-03-01' as times from dual
union all
select 14 as id,'2011-04-01' as times from dual
union all
select 15 as id,'2011-06-01' as times from dual
union all
select 16 as id,'2011-07-01' as times from dual
union all
select 17 as id,'2011-08-01' as times from dual
union all
select 18 as id,'2011-09-01' as times from dual
union all
select 19 as id,'2011-10-01' as times from dual)
Select Count(1)as cnt, dates
From (select id,
case
when to_char(to_date(times, 'yyyy-mm-dd'), 'mm') <='03' then
to_char(to_date(times, 'yyyy-mm-dd'), 'yyyy')
[解决办法]
'年 第1季度'
when to_char(to_date(times, 'yyyy-mm-dd'), 'mm') <='06' then
to_char(to_date(times, 'yyyy-mm-dd'), 'yyyy')
[解决办法]
'年 第2季度'
when to_char(to_date(times, 'yyyy-mm-dd'), 'mm') <='09' then
to_char(to_date(times, 'yyyy-mm-dd'), 'yyyy')
[解决办法]
'年 第3季度'
when to_char(to_date(times, 'yyyy-mm-dd'), 'mm') <='12' then
to_char(to_date(times, 'yyyy-mm-dd'), 'yyyy')
[解决办法]
'年 第4季度'
end as dates
from t)
group by dates
order by 2
select substr(times,1,4) 年份,to_char(to_date(times,'yyyy-mm-dd'),'Q') 季度,count(*) 数量
from t
group by substr(times,1,4),to_char(to_date(times,'yyyy-mm-dd'),'Q')
order by substr(times,1,4),to_char(to_date(times,'yyyy-mm-dd'),'Q')
年份 季度 数量
-------------------------------
1201113
2201122
3201133
4201141
5201213
6201222
7201233
8201241