【发布时间】:2016-09-02 02:48:25
【问题描述】:
我有以下表格:
表1:
Id | ClientId | Amount
------------------------------
1 | 100 |
2 | 130 |
..
9 | 280 |
表2:源表
Id | CashId | Price | Tax
-----------------------------
1 | 1 | 550 | 120
2 | 1 | 100 | 30
3 | 2 | 320 | 50
4 | 3 | 360 | 100
next data loads
5 | 1 | 80 | 20
6 | 2 | 20 | 9
7 | 4 | 190 | 80
等等。 正在聚合到 tmp 表:
表 3 (tmp):
Id | CashId | Total_Sum
-----------------------------
1 | 1 | 800
2 | 2 | 370
3 | 3 | 460
next data loads
1 | 1 | 100
2 | 2 | 29
3 | 4 | 270
Table2是增量加载,对于表中的每个CashId,现金存款可以发生几次。对于第一次加载,CashId=1 的 2 现金存款。第二次加载是 CashId=1 的 1 现金存款,但此加载在第二天就出来了。
我想检查下一次装载是否有新的现金存款。表 1 中的金额列由表 2 中每个 CashId 的价格和税金的总和数据组成。
Table1.Id = Table2.CashId
第一次加载后 Table1 的外观如何:
Id | ClientId | Amount
------------------------------
1 | 100 | 800
2 | 130 | 370
...
第二次加载数据后:
Id | ClientId | Amount
------------------------------
1 | 100 | 800 + 100 = 900
2 | 130 | 370 + 29 = 399
...
我想用这样的语句:
MERGE INTO Table1 trg
USING (SELECT * FROM Table3) cash
ON trg.Id = cash.CashId
WHEN MATCHED THEN
UPDATE SET trg.Amount = 'trg.Amount + new Total_Sum'
我需要将新加载的新 Total_Sum 添加到 Table1 中 Amount 列中的现有数据。当有新数据并且我运行 MERGE 语句时,Total_Sum 应该添加到 Amount 列中的现有值,但是当数据第一次出现时应该替换 Amount 列中的空值。
【问题讨论】: