SQL Server - 更新与同一表连接的多个记录

时间:2014-02-10 22:33:59

标签: sql-server tsql sql-server-2005

我的表price_info包含以下列:

group_id (int)    
product_id (int)
date (datetime)
price_override (money, nullable)

一些示例值:

group_id    product_id       date        price_override
   1             1        2014-02-10         25
   1             1        2014-02-11         30
   1             1        2014-02-12        NULL      
   1             2        2014-02-10         40
   1             2        2014-02-11         40
   1             2        2014-02-12         40
   1             3        2014-02-10        NULL
   1             3        2014-02-11        NULL
   1             3        2014-02-12        NULL
   2             1        2014-02-10         42
   2             1        2014-02-11         52
   2             1        2014-02-12         70
   2             2        2014-02-10         28
   2             2        2014-02-11         87
   2             2        2014-02-12         96
   2             3        2014-02-10         45
   2             3        2014-02-11         89
   2             3        2014-02-12        NULL

我想要做的是更新product_id的price_override(并应用一些计算),其中group_id和date相同且price_override不为null。

我想要做的计算是将它乘以@ratio(float)并添加@offset(float)

例如,对于group_id 1,product_id 3,我想将它的price_override设置为group_id 1(product_id 2(其price_override不为空)的(price_override * @ratio)+ @offset)。

我尝试过搜索,但到目前为止,我发现的所有内容都是基于使用唯一ID更新1行。

根据请求的编辑,在给定值的情况下更新单行将是以下内容:

update price_info set price_override = @value where group_id = @group_id and product_id = @product_id and date = @date

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,

update price_info
set price_override = ((price_override * @ratio) + @offset)
where (group_id = 1) and ([DATE] = '2/10/14') and (price_override is not null)

可能会做你想要的。