2011-07-25 44 views
0

比方说,我有这两个表:产品和存储整型字段在表中的每个记录相关记录的总和另一个表比较

产品有产品编号和QuantityAvailable每个记录

存储具有每个记录的LocationId,ProductId和QuantityAvailable(ProductId是产品表的FK)。 'ProductId'可以存储在多个'LocationId'中,因此ProductId和LocationId组成一个复合主键。

我想要的是能够确定'产品'是否在存储中的SQL查询,如果是,则累积存储中'数量'小于'QuantityAvailable'。为了简单起见,我需要Product表中所有关联条目的'Quantity'总和小于Product Table的'QuantityAvailable'的产品表中所有'ProductId'的列表。

我该如何做到这一点(不改变表结构)?

感谢

回答

0

下面的查询会给你的数量,每个产品的总和:

select ProductID, sum(Quantity) as ProductQuantity 
from 
    Storage 
group by 
    ProductID 

现在,你只需要使用该查询作为派生表,加入它,和比较您2个数量:

select 
    * 
from 
    Product p 
    inner join (
     select ProductID, sum(Quantity) as ProductQuantity 
     from 
      Storage 
     group by 
      ProductID) q 
     on p.ProductID = q.ProductID 
where 
    q.ProductQuantity < p.QuantityAvailable 
+0

谢谢,我得到这个工作,但我将如何得到它从产品表中列出所有我的产品ID,即使在存储表不匹配? (应显示ProductQUantity的NULL) – normanram

+0

将内部连接更改为左连接。 –

+0

即将发布,我想出左连接。谢啦。 – normanram

相关问题