2016-04-28 68 views
0

我有兩個日期列[START DATE][END DATE],我只想插入其日期不在任一列中的記錄。這是我的邏輯是這樣的:在MERGE sql server的ON搜索條件中合併兩列

MERGE TABLE_A          AS Target 
USING (SELECT DISTINCT * FROM TABLE_B)    AS Source 
ON (SELECT Target.[START DATE] + Target.[END DATE] AS Target.[COMPAREDATE] = 
    SELECT Source.[START DATE] + Source.[END DATE] AS Source.[COMPAREDATE]) 
WHEN NOT MATCHED THEN 
INSERT ([DATE ADDED], [END DATE], ...) 
VALUES (Source.[DATE ADDED], Source.[END DATE], ...); 

我也嘗試下面的代碼,但它繼續插入重複:

ON (Target.[START DATE] = Source.[START DATE] AND Target.[END DATE] = Source.[END DATE]) 

我會很感激任何幫助,謝謝!

+0

請提供一些示例數據和一些樣本輸出,你是目前正在獲得 – Steven

回答

0

此代碼是接近:

ON (Target.[START DATE] = Source.[START DATE] AND Target.[END DATE] = Source.[END DATE]) 

它說,「如果這兩個起始日期和結束日期的比賽,那麼相匹配的行」。

如果你想說「如果任一StartDates匹配或EndDates匹配,則排比賽」,那麼你應該這樣做:

ON (Target.[START DATE] = Source.[START DATE] OR Target.[END DATE] = Source.[END DATE]) 
+0

工作,謝謝!試了一下昨天,現在意識到它沒有奏效的原因是因爲沒有新的記錄,那麼......不是因爲OR不是我所需要的。 –