oracle的查询表A:
  codeId 数量1 数量2 数量3
  001      100  200  300
  002      200  300  400
  003      100  500  200表B:
  codeID parentid
  001    
  002    001
  003    001
  004    002
意思大概是这样
表B是一个父子的对应表
如果parentid为空则为根表A中放的codeid和表B是对应起来的
现在要求:
要查询
001下面所有的表B的数据总和[数据和为数量1+数量2+数量3]
其他当然包括表B中codeid为002/003的,因为这些都是属于001的
其他的类推

解决方案 »

  1.   

    范例:
    CREATE TABLE TBL_B(CODEID VARCHAR2(3), PARENTID VARCHAR2(3));INSERT INTO TBL_B
    SELECT  '001',NULL FROM DUAL UNION ALL    
    SELECT  '002',    '001'  FROM DUAL UNION ALL    
    SELECT  '003'    ,'001' FROM DUAL UNION ALL    
    SELECT  '004'   , '002' FROM DUAL;CREATE TABLE TBL_A(CODEID VARCHAR2(3), NUM1 INT, NUM2 INT, NUM3 INT);INSERT INTO TBL_A
    SELECT  '001',      100,  200  ,300 FROM DUAL UNION ALL
    SELECT  '002',      200 , 300 , 400 FROM DUAL UNION ALL
    SELECT  '003',      100  ,500,  200 FROM DUAL;SELECT SUM(NUM1+NUM2+NUM3) 
    FROM TBL_A
    WHERE EXISTS(
      SELECT 1 FROM TBL_B
      WHERE CODEID = TBL_A.CODEID
      START WITH PARENTID IS NULL
     CONNECT BY PRIOR CODEID = PARENTID)
    /
      

  2.   

    select sum(a.数量1+a.数量2+a.数量3) from a
    where exists(
                 select b.codeID from b
                 where a.codeID=b.parentid 
                 and b.parentid='001' 
                 or 
                 (b.codeID='001' and b.parentid is null)
                 )没测试.对于楼上的START WITH PARENTID IS NULL CONNECT BY PRIOR CODEID = PARENTID
    没用过,希望解释下!谢谢
      

  3.   

    SELECT SUM(NUM1+ NUM2 + NUM3)
      FROM TBL_A A 
     WHERE A.CODEID IN (SELECT CODEID 
                         FROM TBL_B B 
                        WHERE B.CODEID = '001'
           OR B.PARENTID = '001'
                       )
      

  4.   

    SELECT SUM(NUM1+NUM2+NUM3)
    FROM TBL_A
    WHERE EXISTS(
    SELECT 1 FROM TBL_B
    WHERE CODEID = TBL_A.CODEID
    START WITH CODEID = '001'
    CONNECT BY PRIOR CODEID = PARENTID)如果004 也属于001的话用上面的查询