首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle 按半年统计解决办法

2013-01-11 
oracle按半年统计现在遇到一个oracle统计语句,按半年统计有id,time字段, time为yyyy-mm-dd的varchar2类型。

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


这个是按季度的,都测试过了
[解决办法]
数据参考ls


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



热点排行
Bad Request.