使用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与具有SUM(),以达到我想要的。

我尝试过各种东西在我的组由/ having子句,但我没有得到任何结果。

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

我想要的结果,显示其总计为30 StockSpaces的(至少一个)的组合,所以可告诉用户“您可以从“6-B获得从空间‘6-C’21个单位,和9个单位”。有可能是行的多种组合,可以总结()> = 30,但我至少需要如何找到一个组合呢!救命啊!

有帮助吗?

解决方案

你所要做的是运行总和,您可以用SQL的各种技术获得。我认为最有效的查询,特别是如果你正在尝试做的这一切都在同一个查询中,是使用CTE(这里的一个示例 )。

<强> 另一种技术 那并不“T依靠CTE需要的数据填充到另一个表(可能是一个临时表,虽然),基本上你,你去做一个联接和排序操作。

一旦你的数据以包括运行总和,则可以简单地选择从该运算总和小于或等于你正在试图定位的总数的值。

这里 是一个很好的总结几种不同的技术。

其他提示

可以具有内选择,如:

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子句后添加更多的组的能力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top