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

如果得到指定时间范围内的所有日期(按天或按月),一个不少。解决方法

2012-02-03 
如果得到指定时间范围内的所有日期(按天或按月),一个不少。需求是这样的,要做个趋势报表,按天或按月统计指

如果得到指定时间范围内的所有日期(按天或按月),一个不少。
需求是这样的,要做个趋势报表,按天或按月统计指定时间范围内的各类型的订单数量,例如
日报                   文具         体育用品           书籍
--------------------------------------
2007-06-01         1                     2                   3
2007-06-02         3                     2                   1
...

月报                   文具         体育用品           书籍
-------------------------------------
2007-06         10                     20                   30
2007-07         30                     20                   10  

表结构(ORDER_INFO)
-------------------------------------
..
类型     ORDER_TYPE(文具,体育用品,书籍)
日期     ORDER_TIME
...

我现在的做法是先   from   ORDER_INFO   group   by   to_char(ORDER_TIME, 'YYYY-MM-DD ')
再   left   join   各类型订单的   count(*)

这样做的缺陷是,如果某天没有任何的订单,那么这一天的记录就不会显示。我希望是   显示0,象这样
日报                   文具         体育用品           书籍
--------------------------------------
2007-06-01         1                     2                   3
2007-06-02         3                     2                   1
2007-06-02         0                     0                   0

月报也同理.

系统表中是否这种完整的日期对照表?

这个SQL该怎么写?请大侠们指导,百分感谢~!

[解决办法]
nvl(count(*),0)
[解决办法]
查2007-7月的所有日期
select to_date( '2007-7-1 ', 'yyyy-mm-1 ')+rownum-1 from all_objects where rownum <=31;

查2007和2008两年的所有月份
select to_char(add_months(to_date( '2007-1-1 ', 'yyyy-mm-1 '),rownum-1), 'yyyy-mm ') from all_objects where rownum <=24;

[解决办法]
最好的办法就是自己用SQL插入数据到一个日期对照表。然后查询那个表格。如果常用,则更好。

热点排行