解决方案 »

  1.   

    不是很清楚你的需求,最好能够通过模拟数据来描述你需要的结果
    dept 表 
    id mc pid
    1   a     
    2   b   
    3   c    
    4   a1  1
    5   b1  2
    6   c1  3
    7   a11 1
    8   b11 2
    9  c11  3
    业务数据全部是有 7、8 、 9来
    tabname 
    id dept_id
    1    7
    2    7
    3    8
    4    9 
    5    7
    6    7
    我的统计根据选择dept 表来进行计算。
    加入我们同时选择 a,b,c 则统计数据为:
    a  4
    b  1 
    c  1 
    如果我们选择 a b
    a 4 
    b 1 
    我现在能通过start with connect by 统计出a=4 ,b=1 ,c=1 但是我的这个统计只能单个出来,不能同时出来。 
      

  2.   

    不是很清楚你的需求,最好能够通过模拟数据来描述你需要的结果
    dept 表 
    id mc pid
    1   a     
    2   b   
    3   c    
    4   a1  1
    5   b1  2
    6   c1  3
    7   a11 1
    8   b11 2
    9  c11  3
    业务数据全部是有 7、8 、 9来
    tabname 
    id dept_id
    1    7
    2    7
    3    8
    4    9 
    5    7
    6    7
    我的统计根据选择dept 表来进行计算。
    加入我们同时选择 a,b,c 则统计数据为:
    a  4
    b  1 
    c  1 
    如果我们选择 a b
    a 4 
    b 1 
    我现在能通过start with connect by 统计出a=4 ,b=1 ,c=1 但是我的这个统计只能单个出来,不能同时出来。 
    这里的选择 还有可能是  a c1等 不规则的选择
      

  3.   

    不是很清楚你的需求,最好能够通过模拟数据来描述你需要的结果
    dept 表 
    id mc pid
    1   a     
    2   b   
    3   c    
    4   a1  1
    5   b1  2
    6   c1  3
    7   a11 1
    8   b11 2
    9  c11  3
    业务数据全部是有 7、8 、 9来
    tabname 
    id dept_id
    1    7
    2    7
    3    8
    4    9 
    5    7
    6    7
    我的统计根据选择dept 表来进行计算。
    加入我们同时选择 a,b,c 则统计数据为:
    a  4
    b  1 
    c  1 
    如果我们选择 a b
    a 4 
    b 1 
    我现在能通过start with connect by 统计出a=4 ,b=1 ,c=1 但是我的这个统计只能单个出来,不能同时出来。 
    这里的选择 还有可能是  a c1等 不规则的选择with t1 as
     (select 1 id, 'a' mc, null pid
        from dual
      union all
      select 2 id, 'b' mc, null pid
        from dual
      union all
      select 3 id, 'c' mc, null pid
        from dual
      union all
      select 4 id, 'a1' mc, 1 pid
        from dual
      union all
      select 5 id, 'b1' mc, 2 pid
        from dual
      union all
      select 6 id, 'c1' mc, 3 pid
        from dual
      union all
      select 7 id, 'a11' mc, 1 pid
        from dual
      union all
      select 8 id, 'b11' mc, 2 pid
        from dual
      union all
      select 9 id, 'c11' mc, 3 pid
        from dual),
    t2 as
     (select 1 id, 7 dept_id
        from dual
      union all
      select 2 id, 7 dept_id
        from dual
      union all
      select 3 id, 8 dept_id
        from dual
      union all
      select 4 id, 9 dept_id
        from dual
      union all
      select 5 id, 7 dept_id
        from dual
      union all
      select 6 id, 7 dept_id
        from dual)
    select count(t2.id), root_id
      from t2,
           (select t1.*, CONNECT_BY_ROOT(mc) root_id
              from t1
             start with mc in ('a', 'b', 'c', 'a1', 'a11')
            connect by pid = prior id) t3
     where t2.dept_id(+) = t3.id
     group by root_id
      

  4.   

    哦 有这个CONNECT_BY_ROOT东西。 我当初就是在找 这么一个东西。  非常感谢。