Данные из источника должны идти во временную таблицу, содержащую временную область. Затем вы можете выбрать лучший из них (так как ваши образцы данных содержат дубликаты part1 + part2 даже во входных данных)
Таблица образцов и временная таблица
create table pkdup(
PK_Part1 int, PK_Part2 int, StringData varchar(100), DateData datetime,
primary key (PK_Part1,PK_Part2))
insert pkdup select 1234,1234,'', GETDATE()+1000
create table #tmp(col1 nvarchar(max), col2 nvarchar(max), col3 nvarchar(max), col4 datetime)
insert #tmp values
(1234,1234,'Blah','2011-1-1'),
(1234,1234,'Blah','2011-1-1'),
(4321,4321,'Blah','2011-1-1'),
(4321,4321,'Blah','2011-10-10'),
(5678,5678,'Blah','2011-1-1'),
(5678,5678,'Blah1','2011-1-1'),
(8765,8765,'Blah','2011-1-1'),
(8765,8765,'Blah','2011-10-10'),
(8765,8765,'Blah1','2011-10-10');
Заявление о слиянии
merge pkdup as target
using (
select col1, col2, col3, col4
from (select *, row_number() over (
partition by col1, col2
order by col4 desc, len(col3) desc) rownum
from #tmp) t
where rownum=1 -- only the best
) as source
on source.col1=target.PK_Part1 and source.col2=target.PK_Part2
WHEN MATCHED AND (source.col4 > target.datedata or (source.col4=target.datedata and len(source.col3) > target.stringdata))
THEN UPDATE SET target.stringdata = source.col3, target.datedata = source.col4
WHEN NOT MATCHED THEN
INSERT (PK_Part1, PK_Part2, StringData, DateData)
VALUES (source.col1, source.col2, source.col3, source.col4);