关于sql查询的小问题

信息表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)

clipboard.png

阅读 2.2k
1 个回答

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

select 部门名称,日期表,count(*)
from 部门, 日期表
     left join 交易表 on 交易表.部门ID=部门.部门ID AND  交易表.交易日期=日期表.日期
group by 部门名称,日期
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进