这与其他一些问题类似,但是那些使用CASE我不能。这是在Oracle上,我将从excel表运行查询。 (顺便说一下,这些不支持WITH,这会让生活变得更加困难)
我在一张大表中有一系列日期 - 例如2011年1月3日,2012年4月5日,2013年7月1日,2013年9月1日...... 然后我有另一张桌子,其中包括员工在某些日期工作的时间。所以我需要做的是获得每个员工在每个中间时间段内工作的小时数。这些表就像
Dates
1-May-2011
5-Aug-2011
4-Apr-2012
....
和另一个
Employee Hours Date
Sam 4 1-Jan-2011
Sam 7 5-Jan-2011
Mary 12 7-Jan-2012
Mary 5 12-Dec-2013
......
所以结果应该是
Employee Hours In Date Range Till
Sam 11 1-May-2011
Sam 0 5-Aug-2011
Sam 0 4-Apr-2012
Mary 0 1-May-2011
Mary 0 5-Aug-2011
Mary 12 4-Apr-2012
....
有关如何实现这一目标的任何指示吗?
答案 0 :(得分:1)
我不熟悉Oracle SQL及其能力/限制,但是既然你要求提供指示,那么这就是我的看法:
加入表(INNER JOIN),加入规则为EmployeeHours.Date < Dates.Dates
。然后GROUP BY Employee, Dates.Dates
并选择分组列+ SUM(小时)。你最终得到的(使用你的样本数据)是:
Employee | Dates | Hours Sam | 1-May-2011 | 11 Sam | 5-Aug-2011 | 11 Sam | 4-Apr-2012 | 11 Mary | 1-May-2011 | 0 Mary | 5-Aug-2011 | 0 Mary | 4-Apr-2012 | 12
对于其他(更复杂的)数据,会有更多“有趣”的结果,但基本上每行包含到那时的总小时数。
然后,您可以将其用作外部查询的输入,以查找MAX(Hours)
所有行的Dates < currentDates
,并从结果中减去该值。
同样,这不是一个完整的答案,但这是一个应该有效的方向。