使用 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(s) 组合以满足对某些数量的请求。例如,用户需要提取 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;
我想要显示(至少一个)StockSpaces 组合的结果,总和为 30,所以我可以告诉用户“你可以从空间 '6-C' 获得 21 个单位,从 '6-B' 获得 9 个单位。可能有多个行组合可以 sum() >= 30,但我至少需要如何找到一个组合!帮助!