导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

sql语句难题:一个1对多的统计

sky9705 2008-01-22 04:53:40
统计原始订单表和供应商订单表的总额按照供应商归类统计总和,以订单号为关联
两个表,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反而是准确的。

...全文
131 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky9705 2008-01-22
思想上很抵制 group在中间的使用,而且两个字段,所以没想到。
回复
sky9705 2008-01-22
8楼的应该是对的,谢谢给了一个思路

dawugui
潇洒老乌龟(原名:爱新觉罗.毓华)
等 级:

是我的题目有问题,所以需求显得太怪了。。
不好意思,揭帖。。
回复
sky9705 2008-01-22
晕死,我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
回复
dawugui 2008-01-22
估计是对的了.对供应商id , order_id 已经求了唯一了.
回复
dawugui 2008-01-22
--这样呢?
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
回复
sky9705 2008-01-22
这样写确实有成本拆分问题
我把表结构和需求改动一下,
这个才是实际需求:
求所有的Buyer给我们订单多少钱,我们给供应商多少钱。按照buyer 来 group

order_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的总额还是被多次统计过。
回复
一样重复计算
in:out == 1:N
回复
dawugui 2008-01-22
--这样?
select 供应商id , sum(总额) ttlout , ttlin = (select sum(总额) from order_in where order_id = t.order_id)
from order_out t
group by 供应商id
回复
dawugui 2008-01-22
--这样?
select 供应商id , sum(总额) ttlout , ttlin = (select sum(总额) from order_in where order_id = t.order_id)
from order_out
group by 供应商id
回复
少QTY_OUT字段,成本无法拆分,所以无解
回复
dawugui 2008-01-22
确实,我也看了好几分钟了,没搞明白.
回复
奇怪的表结构
奇怪的统计要求
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告