使用SQL Server 2005。我正在构建一个库存/采购程序,现在需要用户“签出”设备。当他选择一个产品时,我需要查询哪些库存位置有可用数量,并告诉用户要去哪个位置/检索产品。
以下是针对特定的[StockLocation_Products].ProductID和特定分配的[ProductUsages].ProductUsageID的查询。
我想也许可以加入额外的 HAVING 子句来使这个查询返回满足请求某些数量所需访问的 StockSpace 组合。例如,用户需要取 30 个产品(ID = 4)。
但我真的不明白如何使用带有 SUM() 的 GROUP BY 和 HAVING 来实现我想要的结果。
我尝试在我的 GROUP BY / HAVING 子句中尝试了各种方法,但我只是得不到任何结果。
我希望能够找到至少一种组合,使得StockSpaces的总和为30。这样我就可以告诉用户:“您可以从‘6-C’空间获得21个单位,并从‘6-B’获得9个单位。”可能有多种行的组合可以使sum()>=30,但我需要至少找到一种可以实现的组合!请帮助我!
以下是针对特定的[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)。
但我真的不明白如何使用带有 SUM() 的 GROUP BY 和 HAVING 来实现我想要的结果。
我尝试在我的 GROUP BY / HAVING 子句中尝试了各种方法,但我只是得不到任何结果。
GROUP BY PROD.ProductID,PROD.ProductName,SL.Room,SL.StockSpace,SLPPU.ResvQty,PUSG.ProductUsage
HAVING SUM(ResvQty) >= 30;
我希望能够找到至少一种组合,使得StockSpaces的总和为30。这样我就可以告诉用户:“您可以从‘6-C’空间获得21个单位,并从‘6-B’获得9个单位。”可能有多种行的组合可以使sum()>=30,但我需要至少找到一种可以实现的组合!请帮助我!