有个表数据如下:
字段有A RQ CS(次数)
  A    RQ          CS
C1121 2012-09-11 3
C1122 2012-09-19 1
C1124 2012-09-19 2想要得到以下效果
  A    RQ          CS
C1121 2012-09-11 3
C1121 2012-09-1 2        3
C1121 2012-09-13 3
C1121 2012-09-14 3
C1122 2012-09-19 1
C1122 2012-09-20 1
C1124 2012-09-19 2
C1124 2012-09-20 2
C1124 2012-09-21 2
日期增加CS(次数)次,并且增加后的日期信息也显示出来,这个通过SQL语句可以实现吗?请大家帮忙看看。

解决方案 »

  1.   


    with t1 as
    (
         select 'C1121' A,date'2012-09-11' RQ,3 cs from dual
         union all
         select 'C1122' A,date'2012-09-19' RQ,1 cs from dual
         union all
         select 'C1124' A,date'2012-09-19' RQ,2 cs from dual
    )select distinct A,rq+level rq,cs
    from t1
    connect by level <= cs+1
    order by A,RQ     A       RQ          CS
    -------------------------------------
    1 C1121 2012/9/11 3
    2 C1121 2012/9/12 3
    3 C1121 2012/9/13 3
    4 C1121 2012/9/14 3
    5 C1122 2012/9/19 1
    6 C1122 2012/9/20 1
    7 C1124 2012/9/19 2
    8 C1124 2012/9/20 2
    9 C1124 2012/9/21 2
      

  2.   

    失误 少了个-1
    select distinct A,rq+level-1 rq,cs
    from t1
    connect by level <= cs+1
    order by A,RQ
      

  3.   

    谢谢HJ_daxian的回复,小量数据测试了一下是可以出来的,但是数据稍微多一些就报“超出cpu使用的会话限制”,而且速度非常慢,我的数据有400条左右,有什么好的优化方式吗?
      

  4.   

    相对复杂了一点 但是不会产生冗余数据 相对上面来说效率肯定高很多
    select A,t_date,cs
    from t1 ,
    (select n_date+level-1 t_date
    from (select min(RQ) n_date,max(RQ+cs) m_date from t1) t2
    connect by level <= m_date-n_date+1) t3
    where t_date between rq and rq+cs
    order by A,t_date