统计原始订单表和供应商订单表的总额按照供应商归类统计总和,以订单号为关联
两个表,1对N, 原始订单表[order_in] 零部件供应订单表[order_out] order_in  结构
------------------------
order_id
qty_in
date_in
总额order_out 结构
------------------------
order_id
供应商id
总额
date_out------------------------
目前的错误SQL写法
select order_in.order_id,sum(order_in.总额) as ttlin, sum(order_out.总额) as ttlout from order_in  ,order_out where order_in.order_id=order_out.order_id  group by order_out.供应商id
目的就是统计各供应商订单的利润情况,
看是正确,但问题出现了,order_in的总额会多次累加,因1对N的关系,造成ttlin总数不准,order_out反而是准确的。 

解决方案 »

  1.   

    少QTY_OUT字段,成本无法拆分,所以无解
      

  2.   

    --这样?
    select 供应商id , sum(总额) ttlout , ttlin = (select sum(总额) from order_in where order_id = t.order_id)
    from order_out
    group by 供应商id
      

  3.   

    --这样?
    select 供应商id , sum(总额) ttlout , ttlin = (select sum(总额) from order_in where order_id = t.order_id)
    from order_out t
    group by 供应商id
      

  4.   

    一样重复计算
    in:out == 1:N
      

  5.   

    这样写确实有成本拆分问题
    我把表结构和需求改动一下,
    这个才是实际需求:
    求所有的Buyer给我们订单多少钱,我们给供应商多少钱。按照buyer 来 grouporder_in     结构 
    ------------------------ 
    order_id 
    Buyer_id
    qty_in 
    date_in 
    总额 order_out   结构 
    ------------------------ 
    order_id 
    供应商id 
    总额
    date_out 
    ------------------------------------------SQL写法:
    select  order_in.order_id,sum(order_in.总额)   as   ttlin,   sum(order_out.总额)   as   ttlout  
    from    order_in ,order_out
    where   order_in.order_id=order_out.order_id 
    group   by   order_in.buyer_id现在需求是符合实际了,但统计order_in的总额还是被多次统计过。
      

  6.   

    --这样呢?
    select t.供应商id , sum(t.ttlout) ttlout , sum(m.总额) ttlin from
    (select 供应商id , order_id , sum(总额) ttlout from order_out group by 供应商id , order_id) t,order_in m
    where t.order_id = m.order_id
    group by t.供应商id
      

  7.   

    估计是对的了.对供应商id , order_id 已经求了唯一了.
      

  8.   

    晕死,我select写错了,应该是buyer及下面的利润统计
    select     order_in.buyer_id,sum(order_in.总额)  as  ttlin,  sum(order_out.总额)  as  ttlout     
    from        order_in   ,order_out 
    where       order_in.order_id=order_out.order_id   
    group       by     order_in.buyer_id
      

  9.   

    8楼的应该是对的,谢谢给了一个思路dawugui 
    潇洒老乌龟(原名:爱新觉罗.毓华) 
    等 级:是我的题目有问题,所以需求显得太怪了。。
    不好意思,揭帖。。
      

  10.   

    思想上很抵制 group在中间的使用,而且两个字段,所以没想到。