表A: Item_Id   Pro_Id 
10       1003
10       1004
10       1005
20       2001
20       2002
20       2003
20       2004
20       2005
20       2006
20       2007
20       2008
20       2009
20       2010
30       3001表B:     
Org_ID      Item_ID   Pro_ID   Bal
0000001     10        1003     1.1
0000001     10        1004     1.2
0000002     10        1005     1.1
0000002     20        2001     1.2怎么通过两张表得到以下结果
(记录数= 表A的记录数*distinct(表B.Org_Id)) 
Org_id      Item_Id   Pro_Id     Bal          
0000001     10       1003      1.1
0000001     10       1004      1.2
0000001     10       1005      0
0000001     20       2001      0
0000001     20       2002      0
0000001     20       2003      0
0000001     20       2004      0
0000001     20       2005      0
0000001     20       2006      0
0000001     20       2007      0
0000001     20       2008      0
0000001     20       2009      0
0000001     20       2010      0
0000001     30       3001       0
0000001     10       1003      0
0000001     10       1004      0
0000001     10       1005      1.1
0000001     20       2001      1.2
0000001     20       2002      0
0000001     20       2003      0
0000001     20       2004      0
0000001     20       2005      0
0000001     20       2006      0
0000001     20       2007      0
0000001     20       2008      0
0000001     20       2009      0
0000001     20       2010      0
0000001     30       3001       0
其中该表Org_Id,Item_Id,Pro_Id在表B找不到数据的时候,Bal自动填0.
请大虾看看,解决马上给100分,谢谢.不能用函数和过程,谈谈实现原理.可以用临时表.怎样速度才能最快.效率最高.

解决方案 »

  1.   

    补充一下,得到的表是新表.字段为Org_id      Item_Id   Pro_Id     Bal
      

  2.   

    SELECT B.Org_ID, A.Item_ID, A.Pro_ID, DECODE(B.Bal, NULL, 0, B.Bal) Bal FROM 表A A, 表B B WHERE A.Item_Id = B.Item_Id(+) AND A.Pro_Id = b.Pro_Id(+)如果A表中有重复字段,那么请你使用 DISTINCT
      

  3.   

    SELECT DISTINCT B.Org_ID, A.Item_ID, A.Pro_ID, DECODE(B.Bal, NULL, 0, B.Bal) Bal FROM 表A A, 表B B WHERE A.Item_Id = B.Item_Id(+) AND A.Pro_Id = b.Pro_Id(+)
      

  4.   

    SELECT m.Org_ID, m.Item_ID, m.Pro_ID, NVL(n.Bal, 0) Bal FROM (SELECT b.Org_ID, a.Item_ID, a.Pro_ID FROM 表A a, (SELECT DISTINCT Org_ID FROM 表B) b) m, 表B n WHERE m.Item_ID = n.Item_ID(+) AND m.Pro_ID = n.Pro_ID(+)
      

  5.   

    SELECT m.Org_ID, m.Item_ID, m.Pro_ID, NVL(n.Bal, 0) Bal 
    FROM (SELECT b.Org_ID, a.Item_ID, a.Pro_ID FROM 表A a, 
    (SELECT DISTINCT Org_ID FROM 表B) b) m, 表B n 
    WHERE m.Item_ID = n.Item_ID(+) 
    AND m.Pro_ID = n.Pro_ID(+)