2014-02-10 4 views
1

У меня есть таблица price_info, который содержит следующие столбцы:SQL Server - Обновление нескольких записей, соединяющих с одним столом

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 

То, что я хочу сделать, это я хочу обновить price_override (и применить некоторые вычисления) product_id, где group_id и дата совпадают, а price_override не равно null.

Расчет я хочу сделать, это умножить его на @ratio (флоат) и добавьте @offset (флоат)

Например, для group_id 1, PRODUCT_ID 3, я хочу, чтобы установить его price_override быть (price_override * @ratio) + @offset group_id 1, product_id 2 (где его price_override не равно null).

Я пробовал поиск, но до сих пор все, что я нашел, основано на обновлении только 1 строки с использованием уникальных идентификаторов.

В соответствии с запрашиваемым редактирования, чтобы обновить одну строку заданного значения будут следующие:

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) 

может делать то, что вы хотите.

Смежные вопросы