【问题标题】:Merging with conditions (SQL Server)合并条件 (SQL Server)
【发布时间】:2015-11-09 00:18:37
【问题描述】:

我有两个表格,表格 A 和表格 B,格式相同。我正在运行使用表 B 作为源的合并语句

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;

【问题讨论】:

    标签: sql-server merge multiple-conditions


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多