我正在写一个存储过程。存储过程将清点所有库存条目,并返回该产品所有单位的总成本等。我的产品和供应商信息分组,然后当它涉及到的数量和价值我有这个乘法总之
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
然而,当我尝试运行创造...
消息8120,16级,因为它不是在聚合函数或GROUP BY子句中包含的状态1,行2
列“Inventory.Quantity”在选择列表中无效。因为它不是在聚合函数或GROUP BY子句中包含
消息8120,级别16,状态1,2号线
列“Inventory.UnitCost”在选择列表中无效。
列处于一种聚集体,只有在聚集,它们仅仅是在同一集合在一起。我究竟做错了什么?
应该“ie.ProductID”是“i.ProductID “?在加入? – rjdevereux
'SUM()OVER()'不是汇总 – Serg
作为@Serg说,也不会回到你想要的结果。你需要一个子查询或其他'JOIN' –