我同意@JNK的评论,你最好用VIEW
。对于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
如果你还想做UPDATE
,然后尝试:
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您使用的是? – Lamak 2011-04-11 20:25:58
这是一个可怕的***数据结构。当价格发生变化时,您是否要检查该表中的每条记录并更新该项目所有实例的低价格?与lowprice_Store一样,您是否要验证每次插入/更新/删除后运行?这会导致你很多头痛...... – JNK 2011-04-11 20:31:36
你最好把它放在一个视图中,而不是改变你的这个信息的基础表。 – JNK 2011-04-11 20:37:06