【发布时间】:2014-07-22 16:35:52
【问题描述】:
我正在尝试在一个标识号上连接两个表(库存和销售额),并将库存中的商品数量、库存价值和销售价值/数量相加。这是按零件编号分组的。
这就是我正在做的事情:
`select inv.[num]
, sum(inv.[Value]) as [Inventory Value]
, sum(inv.[qty]) as [Inventory Qty]
, sum(sales.[Value]) as [Sales Value]
, sum(sales.[qty]) as [Sales qty]
from Inv
left join sales
on inv.[num]=sales.[num]
group by inv.[num]`
库存价值总和大约大 50 倍,销售额大约大 3 或 4 倍。 如何避免过度求和?
【问题讨论】:
-
正在发生的事情被称为“扇形”。您能否向我们展示一些示例数据,以便我们确定哪种方法是修复它的最佳方法?单独汇总 Inv 或 Sales 应该可以解决这个问题。
-
尝试添加
where sales.num is not null。无论如何,上面的评论给了你正确的答案 -
这是因为
inv.[num]=sales.[num]不是一对一的匹配。Inv中的每一行都与sales中的多行配对,您将所有这些组合中的[Value]相加。
标签: sql sql-server join sum left-join