如图所示:

我现在要根据合同号统计订单金额和退款金额
其中表1中,订单号和合同号是多对1关系
表2中,订单号和退款也是1多关系。

请问下,这个sql怎么写哦?

解决方案 »

  1.   

    -- 也就是说 表1 left join ( 表2中汇总:根据订单号分组汇总每个订单号的退款情况 ) on (订单号)
      

  2.   

    -- 也就是说 表1 left join ( 表2中汇总:根据订单号分组汇总每个订单号的退款情况 ) on (订单号)
    -- 然后在连接的基础上根据 表1 的 合同号分组汇总!即:select ....
     表1 left join ( 表2中汇总:根据订单号分组汇总每个订单号的退款情况 ) on (订单号)
    group by 表1.合同号...
      

  3.   

    select a.合同号,订单金额(不知道你是怎么计算的),sum(b.退款金额) 退款金额 from a
    left join (select 订单号 ,sum(退款手续费*退款数量) 退款金额 from b group by 订单号)b
    on a.订单号=b.订单号
    group by a.合同号
      

  4.   

    SQL> WITH A AS(
      2  SELECT 54225 订单号,'2011090518242369' 合同号,'chinabank' 支付方式,10000 支付金额,1 支付手续费,100 销售数量,100 销售价,90 结算价 from dual
      3  union
      4  SELECT 54224 订单号,'2011090513393769' 合同号,'alipay' 支付方式,10000 支付金额,1 支付手续费,100 销售数量,100 销售价,90 结算价 from dual
      5  union
      6  SELECT 54226 订单号,'2011090513393769' 合同号,'alipay' 支付方式,10000 支付金额,1 支付手续费,100 销售数量,100 销售价,90 结算价 from dual),
      7  B AS(
      8  SELECT 54224 ORDER_ID,10 退款手续费,50 退款数量 FROM DUAL
      9  UNION ALL
     10  SELECT 54224 ORDER_ID,10 退款手续费,10 退款数量 FROM DUAL)
     11  SELECT A.合同号,sum(A.支付金额) 支付金额总计,sum(B.退款金额) 退款金额 from A
     12  LEFT JOIN
     13  (SELECT ORDER_ID,sum(退款手续费*退款数量) 退款金额 from B group by ORDER_ID ) B
     14  ON A.订单号=B.ORDER_ID
     15  GROUP BY A.合同号;
     
    合同号                 支付金额总计       退款金额
    ---------------- ------------ ----------
    2011090513393769        20000        600
    2011090518242369        10000 
     
    SQL>