先说下各张表 机构表如下(t1)
       机构ID 机构名称
1 中国
101 浙江
10101 杭州
1010101 杭州1号
1010102 杭州2号
10102 宁波
1010201 宁波1号
1010202 宁波2号
1010203 宁波3号
10103 温州
102 江西
103 黑龙江
104 广西机构映射表如下(t2)
说明(从这张表中,可以查询出机构的所有下属机构,比如要查询机构id为101的下属机构
select 机构id from t2 where 上级机构ID=101)上级机构ID 机构ID
1 1
1 101
1 102
1 103
1 10103
1 1010203
1 1010202
1 1010201
1 10102
1 104
1 10101
101 101
101 1010202
101 1010203
101 1010201
101 10103
101 10101
101 10102
102 102
103 103
104 104
10101 10101
10102 10102
10102 1010201
10102 1010203
10102 1010202
10103 10103
1010201 1010201
1010202 1010202
1010203 1010203数据视图如下如下(t3)金额 TERM_ID 机构ID 机构名称
50 938750 1010201 宁波1号
50 938750 1010201 宁波1号
50 938750 1010201 宁波1号
50 983594 1010202 宁波2号
50 983594 1010202 宁波2号
50 983594 1010202 宁波2号
50 983594 1010202 宁波2号
50 938750 1010203 宁波3号
50 938720 1010203 宁波3号
50 938720 1010203 宁波3号
50 938720 1010203 宁波3号
50 938150 1010101 杭州1号
50 938150 1010101 杭州1号
50 938350 1010101 杭州1号
50 938250 1010101 杭州1号
50 938650 1010102 杭州2号输入机构查询出如下的表,比如传入机构ID是10101,则要查询出10101机构下的所有机构数据(可以通过机构映射表查询出该机构ID的所有下属机构),如下
机构ID 机构名称 金额 记录数
10101 杭州 250 5
1010101 杭州1号 200 4
1010102 杭州2号 50 1
注(金额为该所属机构下的sum,记录数为该机构下的count)
在如果传入的机构是是101
机构ID 机构名称 金额 记录数
101 浙江 800 16
10101 杭州 250 5
1010101 杭州1号 200 4
1010102 杭州2号 50 1
10102 宁波 550 11
1010201 宁波1号 150 3
1010202 宁波2号 200 4
1010203 宁波3号 200 4
求这么个存储过程有点复杂的。谢谢

解决方案 »

  1.   

    select 机构ID,机构名称,sum(金额) as 金额,count(*) as 记录数
    from 数据视图
    where 机构ID in (select 机构id from t2 where 上级机构ID=101)
    group by 机构ID,机构名称你的sql
      

  2.   

    HelloWorld_001(我就是那大尾巴狼!) 
    呵呵。先谢下上次的帖。
    这次的要复杂一些哦。。
      

  3.   

    给你一个完整的解决方法, 但是不一定是最好的:SELECT t1.id 机构id,
           t1.NAME 机构名称,
           (SELECT SUM(t3.amount)
            FROM   t3
            WHERE  t3.id IN (SELECT t2.id
                             FROM   t2
                             CONNECT BY PRIOR t2.id = t2.parent_id
                             START  WITH t2.id = t1.id)) 金额,
           
           (SELECT COUNT(1)
            FROM   t3
            WHERE  t3.id IN (SELECT t2.id
                             FROM   t2
                             CONNECT BY PRIOR t2.id = t2.parent_id
                             START  WITH t2.id = t1.id)) 记录数FROM   t1
    WHERE  t1.id IN (SELECT t2.id
                     FROM   t2
                     CONNECT BY PRIOR t2.id = t2.parent_id
                     START  WITH t2.id = '101');
      

  4.   

    下面是我测试的数据, 根据你帖子里提到的数据生成..create table t1(
    id  varchar2(60),
    name  varchar2(60)
    );create table t2(
    parent_id varchar2(60),
    id varchar2(60)
    );create table t3(
    amount number(15),
    term_id varchar2(60),
    id varchar2(60),
    name  varchar2(60)
    );
      

  5.   

    insert into t1 ( id, name ) values ('1','中国');
    insert into t1 ( id, name ) values ('101','浙江');
    insert into t1 ( id, name ) values ('10101','杭州');
    insert into t1 ( id, name ) values ('1010101','杭州1号');
    insert into t1 ( id, name ) values ('1010102','杭州2号');
    insert into t1 ( id, name ) values ('10102','宁波');
    insert into t1 ( id, name ) values ('1010201','宁波1号');
    insert into t1 ( id, name ) values ('1010202','宁波2号');
    insert into t1 ( id, name ) values ('1010203','宁波3号');
    insert into t1 ( id, name ) values ('10103','温州');
    insert into t1 ( id, name ) values ('102','江西');
    insert into t1 ( id, name ) values ('103','黑龙江');
    insert into t1 ( id, name ) values ('104','广西');
      

  6.   

    insert into t2 (PARENT_ID, ID)values ('10101', '1010101');insert into t2 (PARENT_ID, ID)values ('10101', '1010102');insert into t2 (PARENT_ID, ID)values ('1', '101');insert into t2 (PARENT_ID, ID)values ('1', '102');insert into t2 (PARENT_ID, ID)values ('1', '103');insert into t2 (PARENT_ID, ID)values ('1', '104');insert into t2 (PARENT_ID, ID)values ('101', '10103');insert into t2 (PARENT_ID, ID)values ('101', '10101');insert into t2 (PARENT_ID, ID)values ('101', '10102');insert into t2 (PARENT_ID, ID)values ('10102', '1010201');insert into t2 (PARENT_ID, ID)values ('10102', '1010203');insert into t2 (PARENT_ID, ID)values ('10102', '1010202');
      

  7.   

    insert into t3 ( amount , term_id , id, name ) values ('50','938750','1010201','宁波1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938750','1010201','宁波1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938750','1010201','宁波1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','983594','1010202','宁波2号');
    insert into t3 ( amount , term_id , id, name ) values ('50','983594','1010202','宁波2号');
    insert into t3 ( amount , term_id , id, name ) values ('50','983594','1010202','宁波2号');
    insert into t3 ( amount , term_id , id, name ) values ('50','983594','1010202','宁波2号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938750','1010203','宁波3号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938720','1010203','宁波3号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938720','1010203','宁波3号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938720','1010203','宁波3号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938150','1010101','杭州1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938150','1010101','杭州1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938350','1010101','杭州1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938250','1010101','杭州1号');
    insert into t3 ( amount , term_id , id, name ) values ('50','938650','1010102','杭州2号');
      

  8.   

    fengson(风声) 
    有qq or msn么?