我有一个总结问题。我尝试使用其他两列的SUM更新列,并且我收到错误"聚合可能不会出现在UPDATE语句的集合列表中。"。我尝试使用子查询,但我得到了同样的错误。有人可以请我直截了当地说明我需要做什么才能让我的头发脱落! (不是真的;))
UPDATE t SET Admin4=
CASE WHEN cb.ProductID=vp.ProductID THEN CAST(SUM(vp.Split) -
SUM(rl.Split)
AS money) ELSE '' END
FROM #tmp t
INNER JOIN SCH.dbo.tblProducts vp ON t.ProductID=vp.ProductID
INNER JOIN SCH.dbo.tblProductsChargeBack cb ON vp.productID=cb.productID
INNER JOIN SCH.dbo.tblLookUp rl ON vp.LookupID=rl.LookUpID;
答案 0 :(得分:0)
试试这个。它可以帮到你
;WITH CTE AS (
SELECT cb.ProductID,CASE WHEN cb.ProductID=vp.ProductID THEN CAST(SUM(vp.Split) - SUM(rl.Split) AS money) ELSE '' END AS Admin4
FROM #tmp t
INNER JOIN SCH.dbo.tblProducts vp ON t.ProductID=vp.ProductID
INNER JOIN SCH.dbo.tblProductsChargeBack cb ON vp.productID=cb.productID
INNER JOIN SCH.dbo.tblLookUp rl ON vp.LookupID=rl.LookUpID
GROUP BY cb.ProductID
)
UPDATE T SET T.Admin4=c.Admin4
from #tmp t
INNER JOIN cte c on t.ProductID=c.ProductID
注意:您正在尝试转换为数据类型Money
。 Money and SmallMoney
数据类型适用于SQL Server (starting with 2008)
。如需参考,请点击Money and Small Money
答案 1 :(得分:0)
你可以试试这个。
UPDATE t SET Admin4=
(SELECT CAST(SUM(vp.Split) - SUM(rl.Split) AS money) FROM
SCH.dbo.tblProducts vp
INNER JOIN SCH.dbo.tblProductsChargeBack cb ON vp.productID=cb.productID
INNER JOIN SCH.dbo.tblLookUp rl ON vp.LookupID=rl.LookUpID;
WHERE t.ProductID=vp.ProductID )
FROM #tmp t
答案 2 :(得分:0)
只是清理版本的更新
UPDATE t
SET Admin4 = CASE WHEN cb.ProductID = vp.ProductID THEN CAST(SUM(vp.Split-rl.Split) AS money)
ELSE ''
END
FROM #tmp t
INNER JOIN SCH.dbo.tblProducts vp
ON t.ProductID = vp.ProductID
INNER JOIN SCH.dbo.tblProductsChargeBack cb
ON cb.productID = vp.productID
INNER JOIN SCH.dbo.tblLookUp rl
ON rl.LookUpID = vp.LookupID;
您不能在更新中使用聚合(总和)。除了聚合需要一个分组。
CASE WHEN cb.ProductID = vp.ProductID
上面没有任何意义,因为这是一个连接条件,并且永远是真的。
试试这个
UPDATE t
SET Admin4 = tt.ssum
FROM #tmp t
JOIN (select vp.productID
, CAST(SUM(vp.Split-rl.Split) AS money) as ssum
FROM SCH.dbo.tblProducts vp
JOIN SCH.dbo.tblProductsChargeBack cb
ON cb.ProductID = vp.ProductID
JOIN SCH.dbo.tblLookUp rl
ON rl.LookUpID = vp.LookupID
GROUP BY vp.productID)
) tt
ON t.productID = tt.productID
由于没有使用cb,所以没有看到JOIN SCH.dbo.tblProductsChargeBack cb
的目的。