2015-09-15 10 views
1

У меня есть таблица с двумя столбцами; EVENT_DATE date и RANG номер первого столбца содержит дату для события, а второй столбец - для периода этого события. вот пример данныхРазвернуть строки таблицы на основе значения столбца

| EVENT_DATE | RANG | 
|------------|------| 
| 03/01/2015 | 1 | 
| 09/04/2015 | 3 | 
| 15/10/2015 | 2 | 

есть ли способ расширить EVENT_DATE путем приращения его на основе значения RANG, поэтому выход будет, как,

| EVENT_DATE | 
|------------| 
| 03/01/2015 | 
| 04/01/2015 | 

| 09/04/2015 | 
| 10/04/2015 | 
| 11/04/2015 | 
| 12/04/2015 | 

| 15/10/2015 | 
| 16/10/2015 | 
| 17/10/2015 | 

ответ

2

Здесь вы идете.

select to_char(event_date + (l - 1),'dd/mm/yyyy') from tab1 t 
left outer join (
    select level l from dual 
    connect by level <= (select max(rang) + 1 from tab1) 
) on l <= rang + 1 
order by event_date, 1; 

SQL Fiddle

1

Это должно работать:

select (t.event_date + t2.value) as event_date 
from t, (select rownum -1 as value from all_objects) t2 
where t2.value <= t.rang 
order by 1 asc; 
0

Другой возможный ответ. Предположим, Event1 - это ваш стол

with tmp as 
(select MAX(RANG) s FROM Event1) 
,rec as (
    select 0 num 
    union all 
    select num+1 from rec where num < (select s from tmp)) 
SELECT DATEADD(DAY, r.num, e.Event_Date) Result from rec r join Event1 e on r.num <= e.RANG 
ORDER BY DATEADD(DAY, r.num, e.Event_Date) 
Смежные вопросы