表名:TT
数据:
Code  Name  FCount
 1     A     2
 2     B     1
 3     C     3要求:根据FCount 得到相应数目的记录集,生成内部序号
结果如下:Code  Name  SortCode
 1     A     1
 1     A     2
 2     B     1
 3     C     1
 3     C     2
 3     C     3有人说可以用序列,如何使用?或者利用连接查询,SQL语句如何实现?
谢谢!

解决方案 »

  1.   

    SQL> select * from test;
     
    CODE       NAME                      FCOUNT
    ---------- ---------- ---------------------
    1          A                              2
    2          B                              1
    3          C                              3
     
    SQL> SELECT DISTINCT code,NAME,LEVEL FROM test  CONNECT BY  code=code AND  LEVEL<=fcount order by code,level;
     
    CODE       NAME            LEVEL
    ---------- ---------- ----------
    1          A                   1
    1          A                   2
    2          B                   1
    3          C                   1
    3          C                   2
    3          C                   3
     
    6 rows selected
     
    SQL> 
      

  2.   


    tmp AS(
      SELECT ROWNUM rn FROM dual
      CONNECT BY ROWNUM<=(SELECT MAX(fcount) FROM tt))
    SELECT a.*,b.rn FROM tt a,tmp b
    WHERE a.fcount>=b.rn
    ORDER BY a.code,b.rn;
      

  3.   

    connect by在大数据量深层次的时候是很没效率的。。
    不过看你的要求也没想出啥好办法。
    实在不成就写存储过程,用循环一条条处理,也不会很快。。
      

  4.   

    感谢:zhuomingwang,测试通过
    PS:我只需要用这个结果集做左联使用