2014-02-10 61 views
1

我有一个包含了下列的表price_info:SQL服务器 - 更新多条记录与同一个表中加入

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(浮点)相乘,并添加@Offset(浮点)

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

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

按所要求的编辑,更新给出的值应为以下单个行:

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

只需编写where子句以选择所有符合条件的行(如第一段中所述),然后使用set语句来执行第二段中的计算。更新语句的其余部分与单行更新的语法相同。 –

+0

请按照您的要求显示您尝试过的功能无法正常工作。你会用什么公式来更新单行?另外,这些变量来自哪里并且它们对于所有行都是相同的? –

+0

我已经添加了更新单行的查询。我不知道更新多行所需的语法,我还没有找到任何指导我的地方。 – CJR

回答

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) 

可能会做你想要什么。

相关问题