假如有趟车有开行规律,10代表隔日开,110代表开两天停一天,依此类推,
有一个表:
 act_date   start_date  stop_date   rule   checi
2007-0817   2007-0817   2007-0825    10     111能不能根据开行规律得到下面结果:
act_date  checi
2007-0817  111
2007-0819  111
2007-0821  111
2007-0823  111
2007-0825  111谢谢!

解决方案 »

  1.   

    SQL> select tt.act_date+(rn-1)*2
      2    from (
      3          select to_date('2007-08-17','yyyy-mm-dd') as act_date,
      4                 to_date('2007-08-17','yyyy-mm-dd') as start_date,
      5                 to_date('2007-08-25','yyyy-mm-dd') as stop_date,
      6                 10 as rule,
      7                 111 checi
      8            from dual
      9         )tt,
     10         (
     11          select rownum rn from all_objects where rownum < 100
     12         )zz
     13   where tt.start_date+(rn-1)*2<=tt.stop_date;TT.ACT_DATE+(RN-1)*2
    --------------------
    8/17/2007
    8/19/2007
    8/21/2007
    8/23/2007
    8/25/2007
      

  2.   

    谢谢,但这个不代表普遍性啊,如果规律是101,则应该是
    act_date  checi
    2007-0817  111
    2007-0819  111
    2007-0820  111
    2007-0822  111
    2007-0823  111
    2007-0825  111
      

  3.   

    8月17的帖子,也不知道楼主还在不在,呵呵。SELECT bb
      FROM (SELECT tt.start_date + ROWNUM - 1 bb,
                   SUBSTR (RPAD (tt.rule,
                                 (tt.stop_date - tt.start_date + 1),
                                 tt.rule
                                ),
                           ROWNUM,
                           1
                          ) cc
              FROM all_objects,
                   (SELECT TO_DATE ('2007-08-17', 'yyyy-mm-dd') AS act_date,
                           TO_DATE ('2007-08-17', 'yyyy-mm-dd') AS start_date,
                           TO_DATE ('2007-08-25', 'yyyy-mm-dd') AS stop_date,
                           10 AS rule, 111 checi
                      FROM DUAL) tt
             WHERE ROWNUM <= tt.stop_date - tt.start_date + 1)
     WHERE cc = 1
      

  4.   

    rownum是不是只跟一条记录有关啊?
    act_date       start_date     stop_date       rule       checi 
    2007-0817       2007-0817       2007-0825      10         111 
    2007-0817       2007-0817       2007-0825      110        222 
    怎么能把两趟车次都生成出来呢?