Как обновить значения от одного условия где к другому, где условие для той же таблицы и столбца, используя SQL

Я хочу обновить значения столбца на разных условиях. ниже приведен пример

ID,  Product,   MonthID,  Rate
1 ,     a,      201610,    13
2 ,     a,      201611,    22
3 ,     b,      201610,    29
4 ,     b,      201611,    14

SELECT rate 
FROM dbo.sales 
WHERE monthid = 201610

ID,  Product,  MonthID,  Rate
 1,     a,     201610,    13
 3,     b,     201610,    29

Я получаю значения ставки, как указано выше. Теперь я хочу увидеть эти значения столбца ставки в одной и той же таблице в другом monthid условии, как monthid ниже

SELECT rate 
FROM dbo.sales 
WHERE monthid = 201611

После обновления Результат:

ID,  Product,  MonthID,   Rate
 2,     a,     201611,     13
 4,     b,     201611,     29

Финальный стол:

ID,  Product,   MonthID,   Rate
 1,     a,      201610,     13
 2,     a,      201611,     13
 3,     b,      201610,     29
 4,     b,      201611,     29

Можно ли обновить значения ставки от одного условия к другому, где условие?

Всего 3 ответа


update s
set rate = (select rate from dbo.sale where idmonth = 201610 and product = a.product )
from dbo.sales s 
where idmonth = 201611

работает только тогда, когда у вас есть только одна запись для каждого продукта в каждом месяце.


Создать V1 (просмотр в sql): SELECT id, Product, MonthID, Rate FROM dbo.tb1 WHERE (MonthID = 201610)

Создать V2 (просмотр в sql): SELECT id, Product, MonthID, Rate FROM dbo.tb1 WHERE (MonthID = 201611)

Создать V3 (Просмотр в sql): ВЫБЕРИТЕ dbo.V1.id, dbo.V1.Product, dbo.V1.MonthID, dbo.V1.Rate, dbo.V2.id AS id2, dbo.V2.Product AS Product2, dbo .V2.MonthID AS MonthID2, dbo.V2.Rate AS Rate2 ОТ dbo.V1 ВНУТРЕННИЙ ПРИСОЕДИНЯЙТЕСЬ к dbo.V2 ON dbo.V1.Product = dbo.V2.Product GROUP BY dbo.V1.id, dbo.V1.Product, dbo .V1.MonthID, dbo.V1.Rate, dbo.V2.id, dbo.V2.Product, dbo.V2.MonthID, dbo.V2.Rate

id Продукт MonthID Rate id2 Product2 MonthID2 Rate2 1 a 201610 13 2 a 201611 22 3 b 201610 29 4 b 201611 14


Это может помочь обновить значения ставки.

update s1
    set s1.rate = s2.rate
from sales s2 (nolock)
inner join sales s1
    on s1.MonthID = s2.MonthID + 1 and s1.Product = s2.Product
where s2.MonthID = 201610

Есть идеи?

10000