sql-server - SQL 具有 SUM GROUP BY

标签 sql-server sql-server-2005 group-by sum having

使用 SQL Server 2005。我正在构建一个库存/采购程序,我正处于需要用户“检查”设备的位置。当他选择产品时,我需要查询哪些库存位置有可用数量,并告诉用户步行到/检索产品的位置。

这里是对特定 [StockLocation_Products].ProductID 的查询,具有特定分配的 [ProductUsages].ProductUsageID。

SELECT 
  PROD.ProductID,
  PROD.ProductName,
  SL.Room,
  SL.StockSpace,
  SLPPU.ResvQty,
  PRDUSG.ProductUsage
FROM [StockLocations] SL 
INNER JOIN [StockLocation_Products] SLP ON SL.StockLocationID = SLP.StockLocationID 
INNER JOIN [StockLocation_Product_ProductUsages] SLPPU ON SLP.StockLocationID = SLPPU.StockLocationID AND SLP.ProductID = SLPPU.ProductID 
INNER JOIN [ProductUsages] PUSG ON SLPPU.ProductUsageID = PRDUSG.ProductUsageID 
INNER JOIN [Products] PROD ON SLPPU.ProductID = PROD.ProductID
WHERE SLP.ProductID = 4 AND PRDUSG.ProductUsageID = 1

此查询返回:

ProductID ProductName           Room    StockSpace  ResvQty ProductUsage
------------------------------------------------------------------------------------------------------------------------
4   Addonics Pocket DVD+/-R/RW  B700    5-D         12      MC Pool
4   Addonics Pocket DVD+/-R/RW  B700    6-B         10      MC Pool
4   Addonics Pocket DVD+/-R/RW  B700    6-C         21      MC Pool
4   Addonics Pocket DVD+/-R/RW  B700    6-D         20      MC Pool

我想也许我可以使用一个额外的 HAVING 子句来让这个查询返回你需要访问哪个 StockSpace 组合来满足一些数量的请求。例如。用户需要拉取 30 个产品(ID = 4)。

但我真的不明白如何使用 GROUP BY 和 HAVING SUM() 来实现我想要的。

我在我的 group by/having 子句中尝试了各种方法,但我没有得到任何结果。

GROUP BY PROD.ProductID,PROD.ProductName,SL.Room,SL.StockSpace,SLPPU.ResvQty,PUSG.ProductUsage
HAVING SUM(ResvQty) >= 30;

我希望结果显示(至少一个)总计为 30 的 StockSpaces 组合,因此我可以告诉用户“你可以从空间 '6-C' 获得 21 个单位,从 '6-B' 获得 9 个单位'.可能有多种行组合可以 sum() >= 30,但我至少需要如何找到一种组合!帮助!

最佳答案

你可以有一个内部选择,例如:

SELECT count_of_foo, count(bar), baz
FROM (SELECT count(foo) as count_of_foo, bar, baz, other1, other2 FROM complex_query WHERE foo = bar HAVING count(foo) > 1) inner_query
GROUP BY count_of_foo, baz.

这将使您能够在 HAVING 子句之后添加更多分组依据。

关于sql-server - SQL 具有 SUM GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088727/

相关文章:

sql - 将存储过程的结果附加到先前执行的存储过程

sql - 按子查询分组

c# - GroupBy 项目和项目的总数量

sql - 以字符结尾的字符串

sql-server - SQL Server : fetching records between two dates?

sql - 如何通过sql水平显示垂直数据

MySQL 计数(按星期几)

php - 如何在 sql server 上的列名称为阿拉伯语时获取数据?

sql - 获取每个品牌每小时的销售额sql

SQL Server 2008 - 跨数据库(同一服务器)与同一数据库中的表的表连接速度有多快?