2015-11-04 24 views
0

很長時間以來,因爲我不知道這是可能的 - 如果是這樣,那我肯定欠你們。將間隔添加爲SQL語句的一部分

我有一個與start_date,end_date和小時表。你看我有起始日期2015年1月1日的一個線,31 END_DATE 2015年12月和小時爲120 我想生產的每一行,並在本月12日線與10小時的結果

所以像

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

我想要十個,因爲我按照月數(12)劃分了120個小時。 120/12 = 10

我可以這樣做嗎?還是類似的東西?我懷疑我可能不得不在代碼中而不是在SQL中執行ETL。有沒有人對我如何能夠接近我想要的東西有任何想法?

謝謝

回答

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 
    ) 
+0

感謝您的答覆@gordonlinoff。如果我使用「with ...」創建數字表,它是否會爲此事務創建它?我想在prod數據庫上運行這個SQL,所以不想影響這個。謝謝 – RNJ

+0

這裏的'rownum'技巧是Oracle的一種[行生成器技術](http://www.orafaq.com/wiki/Oracle_Row_Generator_Techniques)。這些技術不會在數據庫中創建真正的表格,只能創建臨時數據集,您可以將它們用作主要查詢的一部分。也許@Gordon可以編輯答案來包含一個完整的查詢與行生成器? –

+0

非常感謝您的回答 – RNJ

相關問題