ОБНОВЛЕНИЕ Использование самосоединения и агрегатов - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь обновить таблицу с помощью самостоятельного объединения и агрегирования.

Например, в таблице есть следующие столбцы:

store, item, price, lowprice, магазин низких цен

Мне нужно заполнить lowprice и lowprice store.

lowprice будет:

Select item,min(price) group by item

lowprice storeбудет магазин с min(price) для каждого предмета.

Я бы тоже хотел сделать еще один шаг вперед.Скажем, два магазина предлагают товар на один и тот же lowprice.Тогда значением для lowprice store будет «store a / store b», но эта часть менее важна.

Я использую SQL Server.

1 Ответ

3 голосов
/ 12 апреля 2011

Я согласен с комментарием @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...