Обновление или очистка MS SQL Server на основе совпадающих значений - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужна помощь в сценарии, над которым я работаю.

У меня есть две таблицы Product_Staging и Product. Содержание таблицы ниже.

Product_Staging:

Account_No         Product_No        Cur_Revenue             Prev_Revenue
12                 AB                5.0                     3.0
13                 BC                4.0                     4.0
15                 DF                10.0                    7.5

Продукт:

Account_No         Product_No        Cur_Revenue             Prev_Revenue
12                 AB                1.0                     3.0
13                 BC                4.0                     5.0
16                 DF                10.0                    17.5
17                 CG                5.0                      6.0

Мне нужно обновить поля Cur_Revenue и Prev_Revenue таблицы Product с содержанием из таблицы Product_Staging, когда Account_No и Product_No совпали, в противном случае очистите значения в таблице Product. Пример вывода ниже.

Продукт после обновления:

Account_No         Product_No        Cur_Revenue             Prev_Revenue
12                 AB                5.0                     3.0 (Updated from Product_Staging)
13                 BC                4.0                     4.0 (Updated from Product_Staging)
16                 DF                                            (Cleared)
17                 CG                                            (Cleared)

Строка 15 / DF из Product_Staging будет отброшена, так как ее нет в таблице Product.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете попробовать использовать update .... OUTER JOIN

update p SET
p.Cur_Revenue =  ps.Cur_Revenue,
p.Prev_Revenue = ps.Prev_Revenue
from Product p
    LEFT JOIN Product_Staging ps on
        p.Account_No= ps.Account_No

sqlfiddle

Если вы хотите установить значение по умолчанию, но строка не существует в таблице Product, вы можете попробовать использовать функцию ISNULL.

update p SET
p.Cur_Revenue =  ISNULL(ps.Cur_Revenue,0),
p.Prev_Revenue = ISNULL(ps.Prev_Revenue,0)
from Product p
    LEFT JOIN Product_Staging ps on
        p.Account_No= ps.Account_No
...