Sql server 子查询在更新无效时返回了1个以上的值
我正在尝试使用另一个表中每个项目的数量总和来更新SQL Server表 这是我的第一次尝试:Sql server 子查询在更新无效时返回了1个以上的值,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在尝试使用另一个表中每个项目的数量总和来更新SQL Server表 这是我的第一次尝试: UPDATE InventoryMaster SET TemporaryStock = ((SELECT coalesce(SUM(Quantity), 0) AS Total FROM InventoryTransTemp WHERE CustomerID = '0'
UPDATE InventoryMaster
SET TemporaryStock = ((SELECT coalesce(SUM(Quantity), 0) AS Total
FROM InventoryTransTemp
WHERE CustomerID = '0'
GROUP BY InventoryItemID) -
(SELECT COALESCE(SUM(Quantity), 0) AS Total
FROM InventoryTransTemp
WHERE CustomerID > 0
GROUP BY InventoryItemID))
下面是我使用join的第二个示例
UPDATE a
SET a.TemporaryStock =((SELECT COALESCE(SUM(Quantity), 0) AS Total
FROM InventoryTransTemp
WHERE CustomerID = '0'
GROUP BY InventoryItemID) -
(SELECT COALESCE(SUM(Quantity), 0) AS Total
FROM InventoryTransTemp
WHERE CustomerID > 0
GROUP BY InventoryItemID))
FROM InventoryMaster a
INNER JOIN InventoryTransTemp b on a.InventoryItemID = b.InventoryItemID
在这两种情况下,我都会得到相同的错误,我想这就是您在这里要做的。子查询的目的是计算每个库存项目的临时库存金额。我们可以将子查询移动到CTE中,然后更新join主表
WITH cte AS (
SELECT
InventoryItemID,
COALESCE(SUM(CASE WHEN CustomerID = 0 THEN Quantity ELSE 0 END) -
SUM(CASE WHEN CustomerID > 0 THEN Quantity ELSE 0 END), 0) AS Total
FROM InventoryTransTemp
GROUP BY InventoryItemID
)
UPDATE a
SET TemporaryStock = b.Total
FROM InventoryMaster a
INNER JOIN cte b
ON a.InventoryItemID = b.InventoryItemID;
请注意,主表中的inventory ID join列的名称不清楚。我假设它与临时表中的名称相同。谢谢,先生,它工作得很好!但是如果我希望我的结果超过这两个查询呢?我需要再添加一个示例:选择InventoryItemID,CustomerID=0时合并SUMCASE,然后选择Quantity ELSE 0 END-CustomerID>0时合并SUMCASE,然后选择Quantity ELSE 0 END,按照InventoryItemID+选择InventoryItemID从InventoryTransTemp组中总计0,当CustomerID=0时合并SUMCASE,然后数量ELSE 0 END-当CustomerID>0时合并SUMCASE,然后数量ELSE 0 END,按InventoryItemId从另一个表组中总计0,但没有看到数据,我无法真正进行注释。添加另一个条件和不应中断查询。