MS-SQL将特定项目的价格更新为与同一表格中的另一个特定项目相同

时间:2017-08-22 14:59:27

标签: sql sql-server

我有一个包含商品和价格的表格,根据位置标识符,价格可能会有所不同。我想做的是拿出项目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循环来更新每个商店的定价,但希望可能有更直接的方式。

任何建议都将不胜感激!

2 个答案:

答案 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