如何使用SQL Server中的关联表计算查询中的记录?

时间:2016-03-24 11:08:51

标签: sql sql-server tsql

我有三个tables

PackingLists
ItemsToPackingLists
Items

我想拥有所有PackingLists的列表,其中包含每个PackingList的项目数和PackingList的WeightInGramms。

我编写了以下查询,但它给出了错误的结果。我想我必须以不同的方式安排joins

任何有关如何重构查询的帮助表示赞赏。

SELECT  p.ID,
        p.NameOfPackingList,
        COUNT(ItemsToP.ItemID) AS NumberOfDifferentItems,
        SUM(items.WeightInGrams * ItemsToP.Quantity) AS WeightInGramms

FROM PackingLists AS p 
LEFT OUTER JOIN ItemsToPackingLists AS ItemsToP 
    ON  (ItemsToP.PackingListID = p.ID)  
LEFT OUTER JOIN  Items AS items 
    ON  (ItemsToP.ItemID = items.ID)
GROUP BY p.ID,p.NameOfPackingList

1 个答案:

答案 0 :(得分:1)

不清楚你想要得到什么,但要检查两个选项。

  1. 使用COUNT(Distinct ItemsToP.ItemID)而不是COUNT(ItemsToP.ItemID),您可以在一个包中包含相同的项目两次(具有不同的数量),并命名col' NumberOfDifferentItems'建议使用不同的。
  2. 但是,您的问题是'每个PackingList的项目数量'。根据我的理解,你应该总结数量,SUM(ItemsToP.Quantity)而不是计算ID。