信息表T_XX 字段如下:
我现在希望得到的结果是:查询近3天每个部门每天产生的数据量,如果没有产生数据,就显示为0
count |
部门名称 |
添加时间 |
每天的日期 |
9 |
部门1 |
2016-04-12 |
2016-04-12 |
5 |
部门2 |
2016-04-12 |
2016-04-12 |
3 |
部门1 |
2016-04-11 |
2016-04-11 |
0 |
部门2 |
2016-04-11 |
2016-04-11 |
0 |
部门1 |
2016-04-10 |
2016-04-10 |
0 |
部门2 |
2016-04-10 |
2016-04-10 |
我的做法是拿添加时间和近3天的日期(由sql语句获取)进行外连接,但是外连接的结果如下所示
也就是说,如果哪一天某部门没有产生数据,连部门名称都没有了。
例如,4月11日这天只有部门1有数据,但是部门2我希望查询后也有数据,而不是不显示了
以下是我的sql:
SELECT t.*,dateLiST.* FROM T_XX t,
select date '2016-02-01' + (rownum - 1) everyday
from dual
connect by rownum <=
(date '2016-04-30' - date '2016-02-01' + 1) dateLiST
WHERE t.添加时间(+) = dateLiST.everyday
错误结果如下表所示
count |
部门名称 |
添加时间 |
每天的日期 |
9 |
部门1 |
2016-04-12 |
2016-04-12 |
5 |
部门2 |
2016-04-12 |
2016-04-12 |
3 |
部门1 |
2016-04-11 |
2016-04-11 |
0 |
|
2016-04-10 |
2016-04-10 |
0 |
|
2016-04-10 |
2016-04-09 |
下面的sql,是oracle获取指定日期区间所有的日期列表
select date '2016-02-01' + (rownum - 1) everyday
from dual
connect by rownum <=
(date '2016-04-30' - date '2016-02-01' + 1)

需要再关联一张能够查询到所有部门的表,否则有哪些部门都不知道,怎么可能出现在查询结果中。
sql语句大概是这样的: