如何使用MSSQL中的聚合函数更新表中的两列?
我试过几种选择,但找不到正确的解决方案。 我想更新如何使用MSSQL中的聚合函数更新表中的两列?,sql,sql-server,sql-update,aggregate-functions,Sql,Sql Server,Sql Update,Aggregate Functions,我试过几种选择,但找不到正确的解决方案。 我想更新Products表中的两列。 这些列需要从另一个名为ProductShops的表中更新 这两列分别命名为LowestPrice和LowestPriceShopId。 因此,我需要ProductShops中的总和NewPrice+DeliveryCosts中的最低值,以及该记录中的ShopId。 需要在产品表中更新 我尝试过的是: UPDATE Products SET LowestPrice = MIN(ps.NewPrice + ps.Del
Products
表中的两列。
这些列需要从另一个名为ProductShops
的表中更新
这两列分别命名为LowestPrice
和LowestPriceShopId
。
因此,我需要ProductShops
中的总和NewPrice+DeliveryCosts
中的最低值,以及该记录中的ShopId
。
需要在产品
表中更新
我尝试过的是:
UPDATE Products
SET LowestPrice = MIN(ps.NewPrice + ps.DeliveryCosts),
LowestPriceShopId = ps.ShopId
FROM Products
INNER JOIN ProductShops ps ON Products.Id = ps.ProductId
错误消息:聚合可能不会出现在UPDATE语句的集合列表中
UPDATE p
SET LowestPrice = ps2.totalPrice,
LowestPriceShopId = ps2.ShopId
FROM Products p JOIN
(select ps.ProductId, MIN(ps.NewPrice + ps.DeliveryCosts) AS totalPrice, ShopId FROM ProductShops ps) ps2
ON p.Id = ps2.ProductId
错误消息:“ProductShops.ProductId”列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
UPDATE Products
SET LowestPrice = (SELECT MIN(ps.NewPrice + ps.DeliveryCosts)
FROM ProductShops ps WHERE ps.ProductId = p.Id)
FROM Products p
对于最后一个查询,我不知道如何获取
ShopId
您需要分组方式
:
UPDATE p
SET LowestPrice = ps2.totalPrice,
LowestPriceShopId = ps2.ShopId
FROM Products p
JOIN (SELECT
ps.ProductId,
MIN(ps.NewPrice + ps.DeliveryCosts) AS totalPrice,
ShopId
FROM ProductShops ps
GROUP BY ps.ProductId,ShopId) ps2
ON p.Id = ps2.ProductId
UPDATE p
SET LowestPrice = ps2.totalPrice,
LowestPriceShopId = ps2.ShopId
FROM Products p
JOIN
(
select
ps.ProductId,
MIN(ps.NewPrice)+MIN(ps.DeliveryCosts) AS totalPrice,
ShopId
FROM
ProductShops ps
GROUP BY
ps.ProductId,
ps.ShopId
) ps2
ON p.Id = ps2.ProductId
在
ProductId
和ShopId
上,我找到了正确的解决方案:
UPDATE p
SET LowestPrice = ps3.totalPrice,
LowestPriceShopId = ps3.ShopId
FROM Products p
JOIN
(
SELECT ps1.ProductId, ps1.NewPrice + ps1.DeliveryCosts as totalPrice, ps1.ShopId FROM ProductShops ps1
LEFT JOIN ProductShops ps2
ON ps1.ProductId = ps2.ProductId AND (ps1.NewPrice + ps1.DeliveryCosts) > (ps2.NewPrice + ps2.DeliveryCosts)
WHERE ps2.NewPrice is NULL AND ps2.DeliveryCosts is NULL
) ps3
ON p.Id = ps3.ProductId
我有两个ProductShops记录具有相同的ProductId,但是如果我运行查询,最高价格将添加到产品记录中。你知道这是怎么发生的吗?@Pim:我更新了答案。可能是
ps.NewPrice+ps.DeliveryCosts
的总成本高于NewPrice
和DeliveryCosts
个人成本。所以像这样测试查询