【问题标题】:GROUP by ITEM number and the sum of Quantity to Stock按项目编号和库存数量之和分组
【发布时间】:2018-04-23 01:33:59
【问题描述】:

我正在努力研究如何按商品编号进行分组并将数量添加到库存中。

我当前的代码是:

SELECT dbo.InventoryItems.ItemNo, dbo.InventoryItems.DescriptionMed AS Description
     , SUM(dbo.InventoryItems.QtyToStock) AS QtytoStock, dbo.Locations.LocationCode
  FROM dbo.InventoryItems INNER JOIN dbo.Locations
    ON dbo.InventoryItems.LocationID = dbo.Locations.LocationID
 GROUP BY dbo.InventoryItems.ItemNo, dbo.InventoryItems.QtyToStock
     , dbo.InventoryItems.DescriptionMed, dbo.Locations.LocationCode
HAVING (dbo.InventoryItems.ItemNo LIKE 'CL10%')

我得到以下结果:

但我的预期输出是:

CL1000 与它们的总和只有两行。 请帮忙!

ItemNo          Description               QTYtoStock      LocationCode
CL1000          Square Seat Legs             4               CREST
CL1000          Square Seat Legs             93              DZ
CL1002          Square Low Back Sofa         5               DZ

【问题讨论】:

  • 我注意到 CL1000 有 2 种不同的描述,您正在对此进行分组 - 我认为这可能是一个问题

标签: sql sql-server group-by count


【解决方案1】:

你显然只需要正确的GROUP BY

SELECT ii.ItemNo, ii.DescriptionMed AS Description, 
       SUM(ii.QtyToStock) AS QtytoStock, l.LocationCode
FROM dbo.InventoryItems ii INNER JOIN
     dbo.Locations l
     ON ii.LocationID = l.LocationID
WHERE ii.ItemNo LIKE 'CL10%'
GROUP BY ii.ItemNo, ii.DescriptionMed, l.LocationCode;  

所有未聚合的列(或表达式)都应在GROUP BY 中。 QtyToStock 正在聚合,所以不合适。

进一步的建议:

  • 使用表别名。这些应该是表格的缩写,以便于理解。
  • 使用缩短的别名来限定列名。书写和阅读要容易得多。
  • HAVING 子句位于GROUP BY 键上。使用WHERE 可以更好地处理(通常)。 WHERE 将减少需要聚合的行数,这通常会提高性能。

【讨论】:

  • 嗨,Gordon,最后一个问题,如果一个项目有 2 个不同的位置,但我仍然想获得其数量的总和,无论它是否在不同的位置?
  • @TrishFernandez 。 . .从SELECTGROUP BY 中删除locationCode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多