我正在尝试使用自联接和聚合来更新表。
例如,表格包含以下列:
商店,商品,价格,低价,低价商店
我需要填充lowprice
和lowprice store
。
lowprice
将是:
Select item,min(price) group by item
lowprice store
将是每个商品min(price)
的商店。
我希望能够更进一步。假设两家商店在同一lowprice
提供商品。然后lowprice store
的值将是'存储/存储b',但这部分不太重要。
我正在使用SQL Server。
答案 0 :(得分:3)
我同意@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