SQL Server 2005を使用しています。在庫/購入プログラムを構築していて、ユーザーが機器を「チェックアウト」する必要がある時点にいます。彼が商品を選択するとき、私はどの在庫場所に利用可能な数量があるかを照会し、どの場所に歩いて商品を取得するかをユーザーに伝える必要があります。
これは、特定の[ProductUsages].ProductUsageIDが割り当てられた特定の[StockLocation_Products].ProductIDのクエリです。
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)。
しかし、私が望むことを達成するために、HAVING SUM()でGROUPBYを使用する方法を本当に理解していません。
グループ内で/having句を使ってさまざまなことを試しましたが、結果が得られません。
GROUP BY PROD.ProductID,PROD.ProductName,SL.Room,SL.StockSpace,SLPPU.ResvQty,PUSG.ProductUsage
HAVING SUM(ResvQty) >= 30;
合計が30になるStockSpacesの(少なくとも1つの)組み合わせを示す結果が必要なので、「スペース「6-C」から21ユニット、「6-B」から9ユニットを取得できます。sum()> = 30になる可能性のある行の組み合わせが複数ある可能性がありますが、少なくとも1つの組み合わせを見つける方法が必要です。ヘルプ!