I want to update every row in the column SalesDifference20132015 in the table Stockitems based on the values in different columns in the same table. I know the SELECT query work however when I plug it into my update query I get the subquery returned more than 1 value error. How do i correlate my select query with my update?
UPDATE warehouse.StockItems
SET SalesDifference20132015 =
(SELECT (SELECT COUNT(*)
FROM Sales.Orders o
join sales.OrderLines ol ON o.OrderID = ol.OrderID
WHERE ol.StockItemID = si.StockItemID AND YEAR(o.OrderDate) = 2013
Group by ol.StockItemID)
-
(SELECT COUNT(*)
FROM Sales.Orders o
join sales.OrderLines ol ON o.OrderID = ol.OrderID
WHERE ol.StockItemID = si.StockItemID AND YEAR(o.OrderDate) = 2015
Group by ol.StockItemID)
FROM Warehouse.StockItems si
)
Something like this should work:
UPDATE si
SET SalesDifference20132015 = DIFF.Diff
FROM
warehouse.StockItems si
JOIN
(
SELECT DISTINCT
StockItemID
,
(
SELECT COUNT(*)
FROM
Sales.Orders o
JOIN sales.OrderLines ol ON o.OrderID = ol.OrderID
WHERE ol.StockItemID = si.StockItemID AND YEAR(o.OrderDate) = 2013
GROUP BY ol.StockItemID
)
-
(
SELECT COUNT(*)
FROM
Sales.Orders o
JOIN sales.OrderLines ol ON o.OrderID = ol.OrderID
WHERE ol.StockItemID = si.StockItemID AND YEAR(o.OrderDate) = 2015
GROUP BY ol.StockItemID
) Diff
FROM Warehouse.StockItems si
) DIFF
ON si.StockItemID = DIFF.StockItemID