2014-02-10 143 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) 

可能會做你想要什麼。

相關問題