我有兩個具有相同結構t1和t2的表。
表t1比t2有大約100多條記錄。使用T-SQL合併更新現有記錄並插入不存在但避免重複的記錄
這裏有一個t1的小樣本。
| pid | tid | amt | paymentdt | paymentmnth | startdate | enddate | updtby
| 670 | 1 | 690.00 | 2015-07-07 | 2015-07-07 | 2015-10-26 14:36:27.000 | 2015-10-26 15:42:42.000 | NULL
| 670 | 11 | 855.00 | 2015-07-07 | 2015-07-07 | 2015-10-26 14:36:27.000 | NULL | NULL
| 670 | 13 | 129.00 | 2015-07-29 | 2015-07-29 | 2015-10-26 14:36:27.000 | NULL | NULL
| 670 | 2 | 855.00 | 2015-09-01 | 2015-09-01 | 2015-10-26 15:42:42.000 | NULL | NULL
| Z41 | 1 | 62.35 | 2015-05-08 | 2015-05-08 | 2015-10-26 10:15:24.000 | 2015-10-26 13:08:05.000 | NULL
| Z41 | 11 | 800.00 | 2015-05-08 | 2015-05-08 | 2015-10-26 10:15:24.000 | NULL | NULL
| Z41 | 2 | 298.00 | 2015-06-01 | 2015-06-01 | 2015-10-26 13:08:05.000 | 2015-10-26 14:36:27.000 | NULL
| Z41 | 3 | 298.00 | 2015-07-01 | 2015-07-01 | 2015-10-26 14:36:27.000 | 2015-10-26 15:15:45.000 | NULL
| Z41 | 4 | 298.00 | 2015-08-01 | 2015-08-01 | 2015-10-26 15:15:45.000 | 2015-10-26 15:42:42.000 | NULL
| Z41 | 5 | 238.00 | 2015-09-01 | 2015-09-01 | 2015-10-26 15:42:42.000 | NULL | NULL
和t2的小樣本。
| pid | tid | amt | paymentdt | paymentmnt | startdate | enddate | updtby
| 670 | 1 | 690.00 | 2015-07-07 | 2015-07-07 | 2015-10-02 16:10:50.000 | 2015-10-02 16:35:50.000 | NULL
| 670 | 11 | 855.00 | 2015-07-07 | 2015-07-07 | 2015-10-02 16:10:50.000 | NULL | NULL
| 670 | 13 | 129.00 | 2015-07-29 | 2015-07-29 | 2015-10-02 16:10:50.000 | NULL | NULL
| 670 | 2 | 855.00 | 2015-09-01 | 2015-09-01 | 2015-10-02 16:35:50.000 | NULL | NULL
| Z41 | 1 | 298.00 | 2015-07-01 | 2015-07-01 | 2015-10-02 16:10:50.000 | 2015-10-02 16:23:26.000 | NULL
| Z41 | 11 | 800.00 | 2015-05-08 | 2015-05-08 | 2015-10-02 16:10:50.000 | NULL | NULL
| Z41 | 2 | 298.00 | 2015-08-01 | 2015-08-01 | 2015-10-02 16:23:26.000 | 2015-10-02 16:35:50.000 | NULL
| Z41 | 3 | 238.00 | 2015-09-01 | 2015-09-01 | 2015-10-02 16:35:50.000 | NULL | NULL
| 173 | 1 | 785.00 | 2015-07-01 | 2015-07-01 | 2015-10-02 16:16:30.000 | 2015-10-02 16:27:36.000 | NULL
| 173 | 11 | 465.00 | 2015-05-01 | 2015-05-01 | 2015-10-02 16:16:30.000 | NULL | NULL
現在比較t1和t2示出了有在T1更多的值的PID Z41
如TID的包括1,2,3,4 5,和11,但在t2中僅存在1,2,3 ,和11.
但是,t1和t2之間的startdate是完全不同的,所以這會引發一些問題。下面是我嘗試過的合併,但它基本上只是在t2中插入每行都與t1不同的startdate。
MERGE INTO t2 AS tgt
USING t1 AS src
ON tgt.pid = src.pid AND
tgt.tid = src.tid AND
tgt.paymentdt = src.paymentdt AND
tgt.paymentmnt = src.paymentmnt AND
tgt.startdate = src.startdate
WHEN MATCHED THEN
UPDATE SET
tgt.amt = src.amt,
tgt.paymentdt = src.paymentdt,
tgt.updatedby = 'MERGEDUPDATE'
WHEN NOT MATCHED THEN
INSERT (pid, tid, amt, paymentdt, paymentmnt, startdate, enddate, updtby)
VALUES (src.pid, src.tid, src.amt, src.paymentdt, src.paymentmnt, src.startdate, src.enddate, 'MERGEDINSERT');
有了這個合併我留下的pid and tid
其中updtby
欄寫着「MERGEDINSERT」重複。但我想避免重複。
如何正確地去了解這個合併不產生重複,但 插入存在於T1而不是T2中的行,同時更新
amt, paymentdt, and paymentmnth
值,同時保持STARTDATE?
可能被刪除日期和ON子句的數量?您所顯示的數據的期望輸出是什麼? –