Pregunta

El uso de SQL Server 2005. Estoy construyendo un programa de inventario / compra y estoy en el punto en que necesito que el usuario “check out” del equipo. Cuando se selecciona un producto, que necesito para consultar las ubicaciones de valores tienen la Cantidad disponible, y decirle al usuario qué ubicación para caminar a / recuperar el producto.

Aquí es una consulta para un determinado .ProductID [StockLocation_Products], con una particular asignada [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

Esta consulta devuelve:

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

pensé que tal vez podría utilizar una cláusula HAVING adicional para hacer este retorno consulta qué combinación de StockSpace (s) que había necesidad de visitar a satisfacer una petición de algunos Cant. P.ej. El usuario necesita para tirar 30 de Producto (ID = 4).

Pero no entiendo muy bien cómo utilizar GROUP BY con tener SUM (), para conseguir lo que quiero.

He intentado varias cosas en mi grupo por tener cláusula /, pero yo no lo entiendo ningún resultado.

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

Quiero resultados que muestran (al menos una) combinación de StockSpaces que resume a 30, por lo que puede indicar al usuario “se puede obtener 21 unidades de espacio '6-C', y 9 unidades de '6-B '. Puede haber múltiples combinaciones de filas que podrían suma ()> = 30, pero necesito al menos cómo encontrar una combinación que hace! Ayuda!

¿Fue útil?

Solución

Lo que estamos tratando de hacer es una suma continua, que se puede obtener con diversas técnicas en SQL. Creo que la consulta más eficiente, especialmente si usted está tratando de hacer todo esto en la misma consulta, es utilizar un CTE ( aquí es un ejemplo ).

Otra técnica que doesn 't dependen de CTE requiere que los datos se rellenarán en otra tabla (podría ser una tabla temporal, aunque) y, básicamente, le hacen una operación join-y-tipo sobre la marcha.

Una vez que obtenga los datos a incluir una suma continua, entonces puede simplemente seleccionar los valores de los que la suma acumulativa es menor o igual al número total que usted está tratando de localizar.

y aquí es un resumen agradable de varias de las diferentes técnicas.

Otros consejos

Puede tener un interno de selección, tales como:

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.

Esto le dará la posibilidad de añadir más grupos de después de la cláusula HAVING.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top