2016-06-14 7 views
0

に複数の行に1行を分割:私はが、私はこの結果を持っている簡単な選択クエリしたOracle

first_date | last_date | period  | outstanding 
14/01/2015 | 31/01/2015 | 31/01/2015 | 100000 
01/02/2015 | 28/02/2015 | 28/02/2015 | 100000 
01/03/2015 | 31/03/2015 | 31/03/2015 | 100000 
01/04/2015 | 14/04/2015 | 31/04/2015 | 100000 

ようにそれを分割したい

first_date | last_date | outstanding 
14/01/2015 | 14/04/2015 | 100000 

をどのように行うのかを見せてください。単純に、関数/プロシージャ、オブジェクト、カーソルを使用せずに。

+0

これをチェックすることができます - http://stackoverflow.com/questions/20269917/split-date-range-into-one-row-per-month-in-sql-server – Shankar

+1

投稿する前にstachoverflowを検索してくださいあなたは同じ質問が何人かの人々によって何度も聞かれることに何度も驚くでしょう。 – Shankar

+0

申し訳ありません、私の英語は良くありません。グーグルグーグルのキーワードを見つけるのに苦労します。 – toMuchArgs

答えて

1

試してみてください。

WITH my_query_result AS(
    SELECT date '2015-01-14' as first_date , date '2015-04-14' as last_date, 
     10000 as outstanding 
    FROM dual 
) 
SELECT greatest(trunc(add_months(first_date, level - 1),'MM'), first_date) 
      as first_date, 
     least(trunc(add_months(first_date, level),'MM')-1, last_date) 
      as last_date, 
     trunc(add_months(first_date, level),'MM')-1 as period, 
     outstanding 
FROM my_query_result t 
connect by level <= months_between(trunc(last_date,'MM'), trunc(first_date,'MM')) + 1; 

サイドノート:4月30日だけを持っているので、あなたの質問に日付31/04/2015が間違っています。

+0

に遭遇しました。あなたは私のヒーローです。 – toMuchArgs

関連する問題