【发布时间】:2015-11-23 19:55:31
【问题描述】:
我有一个项目表,我想从中获取项目数量的总和
查询:
Select item_id, Sum(qty) from item_tbl group by item_id
结果:
==================
| ID | Quantity |
===================
| 1 | 10 |
| 2 | 20 |
| 3 | 5 |
| 4 | 20 |
第二个表是发票表,我从中获取所售商品的数量。我将这两个表加入为
查询:
Select item_tbl.item_id, Sum(item_tbl.qty) as [item_qty],
-isnull(Sum(invoice.qty),0) as [invoice_qty]
from item_tbl
left join invoice on item_tbl.item_id = invoice invoice.item_id group by item_tbl.item_id
结果:
=================================
| ID | item_qty | invoice_qty |
=================================
| 1 | 10 | -5 |
| 2 | 20 | -20 |
| 3 | 10 | -25 | <------ item_qty raised from 5 to 10 ??
| 4 | 20 | -20 |
我不知道我是否以正确的方式加入这些表格。因为我想从项目表中获取所有内容,并从发票表中获取可用的东西来维护库存。所以我使用左连接。请帮忙..
修改
当我按 item_id 添加分组时,我得到了这个:
=================================
| ID | item_qty | invoice_qty |
=================================
| 1 | 10 | -5 |
| 2 | 20 | -20 |
| 3 | 5 | -5 |
| 3 | 5 | -20 |
| 4 | 20 | -20 |
作为一个视图,ID 被重复。我应该怎么做才能避免这种情况??
【问题讨论】:
-
您是否有可能在其中一个表中有条目 3 的 2 条记录?似乎很奇怪,它只会影响一个项目 ID,所以它一定有一些独特的东西。
-
如果您有 2 张 id = 3 的发票 - 那么联接将在结果中创建 2 行而不是预期的一行,从而使总和翻倍。您应该通过唯一的结果集进行连接,可能通过使用在您完成连接之前对发票进行分组的子查询。
-
@Ron.B.I 有真正的问题。解决方案非常简单(假设 item_tbl.ID 是唯一的),只需将 item_tbl.qty 添加到您的 group by 子句即可。
-
我已经回答了,但我想我不太明白
-
@Ron.B.I 你是对的,我必须进行子查询(我以前从未使用过)。你能给我举个例子吗??
标签: sql sql-server join