SQL MIT SUMME GRUPPE DURCH
Mithilfe von SQL Server 2005. Ich bin Gebäude eine Bestandsaufnahme/purchasing-Programm und ich bin an dem Punkt, wo ich noch die Benutzer auf "check out" - Ausrüstung. Wenn er wählt ein Produkt, muss ich Abfragen, welche Lagerorte verfügen die verfügbare Menge, und informieren den Benutzer, welche location zu Fuss zu erreichen/abrufen von Produkt.
Hier ist eine Abfrage für einen bestimmten [StockLocation_Products].ProductID, mit einem bestimmten zugeordnet [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
Diese Abfrage gibt:
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
Ich dachte, vielleicht könnte ich eine zusätzliche HAVING-Klausel, um diese Abfrage zurück, welche Kombination von StockSpace(s) Sie brauchen, um zu besuchen, zu erfüllen, einen Antrag für einige Qty. E. g. Die Bedürfnisse der Nutzer zu ziehen 30 Produkt (ID =4).
Aber ich weiß nicht wirklich verstehen, wie die Verwendung VON GROUP by mit HAVING SUM(), um zu erreichen, was ich will.
Ich habe versucht, verschiedene Dinge in mein group by /having-Klausel, aber ich bekomme keine Ergebnisse.
GROUP BY PROD.ProductID,PROD.ProductName,SL.Room,SL.StockSpace,SLPPU.ResvQty,PUSG.ProductUsage
HAVING SUM(ResvQty) >= 30;
Ich will Ergebnisse, die zeigen, dass (mindestens eine) Kombination von StockSpaces, die Summen bis zu 30, so kann ich sagen, der Benutzer "können Sie sich 21 Einheiten aus Raum - '6-C', und 9 Einheiten von "6-B'. Möglicherweise gibt es mehrere Kombinationen von Zeilen, die Summe() >= 30, aber ich brauche mindestens so finden Sie eine Kombination, die funktioniert! Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie versuchen zu tun, ist eine laufende Summe, die Sie bekommen können mit verschiedenen Techniken in SQL. Ich denke, die effizienteste Abfrage, vor allem, wenn Sie versuchen, diese alle in der gleichen Abfrage, ist die Verwendung eines CTE (hier ein Beispiel:).
Eine andere Technik , die sich nicht auf CTE erfordert die Daten aufgefüllt werden, die in einer anderen Tabelle (könnte ein temp-Tabelle, obwohl) und im Grunde haben Sie eine join-and-sort-Vorgang, wie Sie gehen.
Sobald Sie die Daten zu umfassen, eine laufende Summe, dann können Sie einfach wählen Sie die Werte aus, die die laufende Summe ist kleiner oder gleich der Gesamtzahl, die Sie versuchen zu lokalisieren.
Und hier ist ein guter überblick über die verschiedenen Techniken.
Können Sie haben eine innere wählen, wie:
Diese geben Ihnen die Möglichkeit zum hinzufügen von Gruppen von nach die HAVING-Klausel.