如下2帐表
A表  B表  关联字段
1    3      type(的值有‘0’,‘1’) 按他们进行比对
2    4
3    5
想要的效果
3    3      0
1    0      1
2    0      2
0    4      -4
0    5      -5
也就是说比对2张表的时候,如果type一样,那么就直接用A表的数据去减B表的数据,
                         如果type不一样,用A表存在B表不存在的数据直接与0 相减
                         同理A表不存在B表存在的数据也与0 相减

解决方案 »

  1.   

    full outer join + nvl
      

  2.   

    select  nvl(a.num 0),nvl(b.num,0),nvl(a.num 0)-nvl(b.num,0)
      from a full outer join b 
        on a.type=b.type
      

  3.   

    select  nvl(a.num 0),nvl(b.num,0),nvl(a.num 0)-nvl(b.num,0)
      from a full outer join b 
        on a.type=b.type and a.num=b.num
      

  4.   

    我把代码贴出来吧
    SELECT J.OID,
           DECODE(J.CCFTYPE,'E','0','I','1')CCFTYPE,
           J.IMG_NO,
           J.CCF_QTY,
           SUM(NVL(Q.LIST_QTY,0)) BILL_QTY,
           (J.CCF_QTY-SUM(NVL(Q.LIST_QTY,0))) DIFF_QTY,
           'xiaxin'
    FROM
    (SELECT H.OID,
           decode(H.CCFTYPE,'0','E','1','I') CCFTYPE,
           L.IMG_NO,
           SUM(NVL(L.G_QTY,0)) CCF_QTY
    FROM GW_DEPPRC_HEAD H,
         GW_DEPPRC_LIST L
    WHERE L.HEAD_GUID=H.OID(+)
    AND H.EMS_NO='xiaxin'
    GROUP BY H.EMS_NO,H.CCFTYPE,L.IMG_NO,H.OID
    )J FULL OUTER JOIN
    (SELECT BILL.OID,
           BILL.HEAD_I_E_MARK,
           BILL.LIST_COP_G_NO,
           BILL.LIST_QTY
    FROM gw_view_customs_bill_cur BILL
    WHERE BILL.HEAD_EMS_NO='E00000000001'
    AND BILL.HEAD_TRADE_MODE IN('0255','0654')
    )Q
    ON (J.IMG_NO=Q.LIST_COP_G_NO AND J.CCFTYPE=Q.HEAD_I_E_MARK )
    GROUP BY J.OID,J.CCFTYPE,J.IMG_NO,J.CCF_QTY;