有两个表,如下:
表A:
ID      ID1     NUM
10001   1001    1000
10001   1002    2000
10001   1003    3000
10002   1001    1500
10002   1002    1000
10002   1003    1000表B:
ID       ID1    NUM
20001   1001    20
20001   1002    10
20001   1003    15
20002   1001    10
20002   1002    15
20002   1003    30要实现从A中查出所有ID1为1001的NUM列的和,减去B中所有ID1为1001的NUM列和
我写的SQL语句如下:
SELECT SUM(T1.NUM)-SUM(T2.NUM) FROM A T1, B T2 WHERE T1.ID1='1001' AND T2.ID2='1001'
但是查出来的结果不对。我想我的SQL语句写的可能有问题,可不知道该怎么写,请教

解决方案 »

  1.   


    SELECT S1-S2 FROM (SELECT SUM(NUM) S1 FORM A WHERE ID1='1001') A1 ,(SELECT SUM(NUM) S2 FROM  B WHERE ID1='1001')B1
      

  2.   

    SELECT SUM(T1.NUM)-SUM(T2.NUM) FROM A T1, B T2 WHERE t1.id1=t2.id1
    and t1.id1='1001' and t2.id1='1001'
      

  3.   


    这个查出来的结果不对,和没有t1.id1=t2.id1的结果一个样
      

  4.   

    这个结果是正确的,但是也有个问题,就是当两个SELECT子查询任何一个查不出结果的时候,最终结果都将没有。
    例如:
    如果B表中没有1001这个记录,那么S2就没有。而不是想要的结果0.即:
    S1 - 0 = S1。
      

  5.   


    select 
    (select nvl(sum(t1.num),0) from t1 where t1.id1='1001')-
    (select nvl(sum(t2.num),0) from t2 where t2.id1='1001')
    from dual;
      

  6.   


    SELECT S1 - S2
      FROM (SELECT nvl(SUM(NUM),0) S1 FORM A WHERE ID1 = '1001') A1,
           (SELECT nvl(SUM(NUM),0) S2 FROM B WHERE ID1 = '1001') B1
      

  7.   

    SELECT S1-S2 FROM (SELECT NVL(SUM(NUM),0) S1 FORM A WHERE ID1='1001') A1 ,(SELECT NVL(SUM(NUM),0) S2 FROM  B WHERE ID1='1001')B1