2015-08-16 3 views
2

У меня есть две таблицы: ТАБЛИЦА A и ТАБЛИЦА B того же формата. Я бегу слияния заявление, используя таблицу В качестве источникаСлияние с условиями (SQL Server)

TYPE ITEM QTY1 QTY2 QTY3 
A  AAA  100  200  300 
A  BBB  150  250  310 
B  CCC  101  123  131 
C  DDD  102  55  12 

Дело в том, я хочу, чтобы обновить определенные столбцы, только если запись уже существует в целевой таблице. Вот что я хотел сделать, но я не могу заставить его работать. Я просто хотел знать, возможно ли это с помощью заявления MERGE?

MERGE TABLE A 
    USING (SELECT * FROM TABLE B) B 
    ON B.TYPE = A.TYPE AND B.ITEM = A.ITEM 
    WHEN NOT MATCHED THEN 
     INSERT (TYPE, ITEM, QTY1, QTY2, QTY3) VALUES (B.TYPE, B.ITEM, B.QTY1, B.QTY2, B.QTY3) 
    WHEN MATCHED THEN 
     CASE 
      WHEN 'A' : UPDATE SET A.QTY1 = B.QTY1, A.QTY2 = B.QTY2, A.QTY3 = B.QTY3 
      WHEN 'B' : UPDATE SET A.QTY2 = B.QTY2 , A.QTY3 = B.QTY3 
      WHEN 'C' : UPDATE SET A.QTY3 = B.QTY3 
     END; 

ответ

1

Вы можете добавить условие к статье WHEN MATCHED, и есть несколько из них:

MERGE [TABLE A] 
USING (SELECT * FROM [TABLE B]) B 
ON B.TYPE = A.TYPE AND B.ITEM = A.ITEM 
WHEN NOT MATCHED THEN 
    INSERT (TYPE, ITEM, QTY1, QTY2, QTY3) VALUES (B.TYPE, B.ITEM, B.QTY1, B.QTY2, B.QTY3) 
WHEN MATCHED AND A.TYPE = 'A' THEN 
    UPDATE SET A.QTY1 = B.QTY1, A.QTY2 = B.QTY2, A.QTY3 = B.QTY3 
WHEN MATCHED AND A.TYPE = 'B' THEN 
    UPDATE SET A.QTY2 = B.QTY2 , A.QTY3 = B.QTY3 
WHEN MATCHED AND A.TYPE = 'C' THEN 
    UPDATE SET A.QTY3 = B.QTY3; 

Для получения дополнительной информации см the documentation.

+1

Не могу поверить, что я не видел этого ... Спасибо! –

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