Expand table rows based on column value
You could use a CTE to get a table with a sequence of numbers up to the highest rank in your table, and then join with that:

with nums as (
  select
    level-1 lvl
  from dual
  connect by
    level-1 &lt; = (select max(rang) from foo)
)
select 
  foo.event_date + nums.lvl
, rang
from foo
join nums
  on nums.lvl &lt;= foo.rang
order by
  foo.event_date + nums.lvl;