添加间隔作为SQL语句的一部分

时间:2015-11-04 12:24:23

标签: sql oracle oracle11g etl

这里拍的很长,因为我不确定这是否可能 - 如果是的话我肯定欠你们的。

我有一个包含start_date,end_date和hours的表。考虑我有2015年1月1日的start_date,2015年12月31日的end_date和120的小时。 我想产生12行的结果,每行10个小时和月份

类似

|Jan 15|10|
|Feb 15|10|
...
|Dec 15|10|

我想要10,因为我将120小时除以月数(12)。 120/12 = 10

我可以这样做吗?或类似的东西?我怀疑我可能不得不在代码中而不是在SQL中执行ETL。有没有人对我如何能够接近我想要的东西有任何想法?

由于

1 个答案:

答案 0 :(得分:1)

你只需要一个数字表。如果你有一个,你可以这样做:

select add_months(start_date, n.n - 1),
       val / (months_between(start_date, end_date) + 1)
from t join
     numbers n
     on add_months(start_date, n.n - 1) <= end_date;

您可以通过各种方式创建numbers表。一个简单的方法是这样的:

with numbers as (
      select rownum as n
      from t
      where rownum <= 100
     )