我有一个包含商品和价格的表格,根据位置标识符,价格可能会有所不同。我想做的是拿出项目123的价格并将其应用于所有地点的项目456
storeid itemid price
1 123 '6.95'
1 456 '0.00'
2 123 '4.95'
2 456 '0.00'
期望的结果是使数据看起来像这样:
storeid itemid price
1 123 '6.95'
1 456 '6.95'
2 123 '4.95'
2 456 '4.95'
storeid和itemid是整数,价格是varchar 我考虑将123的所有数据移动到临时表,然后迭代一个while循环来更新每个商店的定价,但希望可能有更直接的方式。
任何建议都将不胜感激!
答案 0 :(得分:1)
以下是使用窗口函数的一种方法:
with toupdate as (
select ip.*,
max(case when itemid = 123 then price end) over (partition by storeid) as new_price
from itemprices ip
)
update toupdate
set price = new_price
where toupdate.itemid = 456;
传统的SQL方法是:
update itemprices
set price = (select ip2.price from itemprices ip2 where ip2.storeid = ip.storeid and ip2.itemid = 123)
where itemid = 456;
或使用join
:
update ip
set price = ip123.price
from itemprices ip join
itemprices ip123
on ip.storeid = ip123.storeid and ip123.itemid = 123
where ip.itemid = 456;
答案 1 :(得分:0)
一种方法是使用联接:
UPDATE t
SET t.Price = t2.price
FROM table t
JOIN table t2 on t.storeid = t2.storeid
and t2.itemid = 123
WHERE t.itemid = 456