2016-04-28 29 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不是我所需要的。 –