SQL ORACLE分组在一个月内的所有日子

时间:2015-04-16 13:42:59

标签: sql oracle grouping

我有一张表有两列。一列是时间戳,另一列是工时数量。

我需要获得另一个月份表,有两列。一个应该是一个月中的一天,另一个应该是当天的总和(劳动力)。

我很容易知道,但问题是,当有一天没有任何劳动时,那一行就不会出现。我需要那一行,日期编号和零作为总和(人工)

感谢您的帮助

我现在获得的表是

day  labor
1      8
2      4
3      7
4      3
6      7
7      9

继续......

如你所见,第5天没有出现,因为这一天没有劳动

我需要一天看起来像... 5,工党0

1 个答案:

答案 0 :(得分:3)

首先,您应该生成天的日期范围(例如2014年至2015年),然后left join您的人工统计数据,示例:

--generating days
WITH days AS
 (SELECT DATE '2014-01-01' + LEVEL - 1 day1
    FROM dual
  CONNECT BY LEVEL <= DATE '2015-01-01' - DATE '2014-01-01')

SELECT day.day1, NVL(sum(labor.labor),0) labot_sum FROM days
LEFT JOIN labor ON trunc(labor.timestamp_col) = days.day1
GROUP BY days.day1

修改

如果您有整数天,生成应该类似于

SELECT LEVEL day1 FROM dual CONNECT BY LEVEL <= 365