SQL - 如何使用依赖于其他计算列上的一列的级别?

时间:2016-04-01 20:25:50

标签: sql oracle oracle11g

如何在Oracle 11g中执行此操作?

此处的问题是DUAL上的查询无法识别APP表。

SELECT APP_VER || SUBVERSION.LEVEL
  FROM APP,
       (SELECT LEVEL
          FROM DUAL
         CONNECT BY LEVEL < APP.NUM_SUBVERSIONS) SUBVERSION

2 个答案:

答案 0 :(得分:0)

假设每个可能的子集都需要一行,你可以避免一些嵌套的问题,如下所示:

select APP_VER  , NUM_SUBVERSIONS, subversions.num
from app app
inner join 
             ( select level num
               from dual
               connect by level <= ( select max(num_subversions) from app)
             ) subversions
  on (subversions.num <= num_subversions)

这需要对表进行更多扫描,因此可能效率不高,但是,根据表和列的名称,我假设您没有那么多记录可以处理。

答案 1 :(得分:0)

如果我正确理解了您的问题,您可以使用Recursive With subquerying来执行此操作:

 <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
    <script type="text/javascript">
    jQuery=$.noConflict();
    jQuery(document).ready(function() {
        jQuery('.navigation dd').hide(); 

        jQuery('.navigation dt').click(function(){ 
                jQuery(this).next('dd').slideToggle('slow');
                jQuery(this).toggleClass('glace_navigationlayer-collapsed'); 


            });


     }); 
    </script>

示例执行:

with a1 (app_ver, num_subversions, lvl) as (
select app_ver, num_subversions, 1
  from app
 union all
select app.app_ver, app.num_subversions, a1.lvl + 1
  from app, a1
 where app.app_ver = a1.app_ver
       and a1.lvl < app.num_subversions)
search depth first by app_ver, num_subversions set my_order
select app_ver || lvl
  from a1;