Ich schreibe eine gespeicherte Prozedur. Die gespeicherte Prozedur nimmt Inventar für alle Inventareinträge auf und gibt unter anderem die Gesamtkosten für alle Einheiten dieses Produkts zurück. Ich bin Gruppierung von Produkt- und Lieferanteninformationen, dann, wenn es um die Menge und den Wert kommt habe ich dieseMultiplikation in Summe
SELECT i.SupplierID, i.SupplierName, p.ProductID, p.ProductName,
SUM(i.Quantity) AS Quantity,
SUM(i.Quantity * i.UnitCost) AS TotalValue,
SUM(i.Quantity * i.UnitCost) OVER() AS AllProductsTotal
FROM Inventory i
JOIN Products p on p.ProductID = i.ProductID
GROUP BY i.SupplierID, i.SupplierName, p.ProductID, p.ProductName
aber wenn ich versuche, das schaffen ...
Msg 8120 zu laufen, Ebene 16 , Status 1, Zeile 2
Die Spalte 'Inventory.Quantity' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.
Msg 8120, Ebene 16, Status 1, Zeile 2
Spalte 'Inventory.UnitCost' ist ungültig in der Auswahlliste, weil sie nicht in einer Aggregatfunktion oder die GROUP BY-Klausel enthalten ist.
Die Säulen sind in einem Aggregat, und nur in einem Aggregat, sie sind einfach im gleichen Aggregat zusammen. Was mache ich falsch?
Sollte „ie.ProductID“ sein „anwenden möchten i.ProductID "? in der Verbindung? – rjdevereux
'SUM() OVER()' ist kein Aggregat – Serg
als @Serg sagte und auch nicht das gewünschte Ergebnis zurückgeben. Sie benötigen eine Unterabfrage oder eine andere 'JOIN' –