Sql server 使用自连接和聚合进行更新
我正在尝试使用自连接和聚合更新表 例如,表具有以下列: 商店,商品,价格,低价,低价商店 我需要填充Sql server 使用自连接和聚合进行更新,sql-server,aggregate,self-join,Sql Server,Aggregate,Self Join,我正在尝试使用自连接和聚合更新表 例如,表具有以下列: 商店,商品,价格,低价,低价商店 我需要填充低价和低价商店 低价是: Select item,min(price) group by item lowprice商店将是每个商品的min(price)商店 我也希望能更进一步。假设两家商店以相同的低价提供一种商品。那么低价商店的值将是“商店a/商店b”,但这部分不太重要 我使用的是SQL Server。我同意@JNK的评论,您最好使用视图。对于SQL Server 2005+您可以尝试: C
低价
和低价商店
低价
是:
Select item,min(price) group by item
lowprice商店
将是每个商品的min(price)
商店
我也希望能更进一步。假设两家商店以相同的低价提供一种商品。那么低价商店
的值将是“商店a/商店b”,但这部分不太重要
我使用的是SQL Server。我同意@JNK的评论,您最好使用视图。对于SQL Server 2005+您可以尝试:
CREATE VIEW LowPrices
AS
SELECT A.store, A.item, A.price, A.Low_Price, MIN(B.store) Low_Price_Store
FROM ( SELECT *, MIN(price) OVER(PARTITION BY item) Low_Price
FROM YourTable) A
JOIN YourTable B
ON A.Low_Price = B.price
GROUP BY A.store, A.item, A.price, A.Low_Price
如果仍要执行更新
,请尝试:
WITH CTE AS
(
SELECT A.store, A.item, A.price, A.Low_Price, MIN(B.store) Low_Price_Store
FROM ( SELECT *, MIN(price) OVER(PARTITION BY item) Low_Price
FROM YourTable) A
JOIN YourTable B
ON A.Low_Price = B.price
GROUP BY A.store, A.item, A.price, A.Low_Price
)
UPDATE A
SET A.LowPrice = B.Low_Price,
A.LowPriceStore = B.Low_Price_Store
FROM YourTable A
JOIN CTE B
ON A.store = B.Store AND A.item = B.item
我同意@JNK的评论,即您最好使用视图
。对于SQL Server 2005+您可以尝试:
CREATE VIEW LowPrices
AS
SELECT A.store, A.item, A.price, A.Low_Price, MIN(B.store) Low_Price_Store
FROM ( SELECT *, MIN(price) OVER(PARTITION BY item) Low_Price
FROM YourTable) A
JOIN YourTable B
ON A.Low_Price = B.price
GROUP BY A.store, A.item, A.price, A.Low_Price
如果仍要执行更新
,请尝试:
WITH CTE AS
(
SELECT A.store, A.item, A.price, A.Low_Price, MIN(B.store) Low_Price_Store
FROM ( SELECT *, MIN(price) OVER(PARTITION BY item) Low_Price
FROM YourTable) A
JOIN YourTable B
ON A.Low_Price = B.price
GROUP BY A.store, A.item, A.price, A.Low_Price
)
UPDATE A
SET A.LowPrice = B.Low_Price,
A.LowPriceStore = B.Low_Price_Store
FROM YourTable A
JOIN CTE B
ON A.store = B.Store AND A.item = B.item
您使用的是什么版本的SQL Server?这是一个糟糕的数据结构。当价格发生变化时,是否要检查该表中的每条记录并更新该项目所有出现的低价?与lowprice_Store相同,在每次运行插入/更新/删除之后,您是否要验证?这将给您带来很多麻烦…您最好将其放在视图中,而不是更改此信息的基础表。您使用的是什么版本的SQL Server?这是一个糟糕的数据结构。当价格发生变化时,是否要检查该表中的每条记录并更新该项目所有出现的低价?与lowprice_Store相同,在每次运行插入/更新/删除之后,您是否要验证?这将给您带来很多麻烦…您最好将其放在视图中,而不是为这些信息更改基础表。OVER。。。分区
很好,但这些黑客问题通常来自于那些被过时系统困住的开发人员,他们需要在没有流线型结构的情况下实现相同的语义。。。分区(PARTITION)
很好,但这些黑客问题通常来自于那些被过时系统困住的开发人员,他们需要在没有流线型结构的情况下实现相同的语义。