Пример данных
DECLARE @T1 TABLE (Id INT, Val1 VARCHAR(20), Val2 VARCHAR(20), [Group] INT);
INSERT INTO @T1
SELECT 1, 'One', '01', 1
UNION
SELECT 2, 'Two', '02', 1
UNION
SELECT 3, 'Three', '03', 1
UNION
SELECT 3, 'Threeeee', '03', 2
UNION
SELECT 4, 'Four', '04', 2
UNION
SELECT 5, 'Five', '05', 2
UNION
SELECT 4, 'Four', '04', 3
UNION
SELECT 5, 'Five', '050', 3
UNION
SELECT 6, 'Six', '06', 3;
В настоящее время вставленные данные:
1 One 01 1
2 Two 02 1
3 Three 03 1
3 Threeeee 03 2
4 Four 04 2
5 Five 05 2
4 Four 04 3
5 Five 050 3
6 Six 06 3
Цель: вставить запись в переменную таблицы (или таблицу cte / temp), основываясь на уникальности, ТОЛЬКО ВКЛ [Id ] поле. «UNION» не сделал бы этого, потому что, как минимум, [Group] собирается сделать дубликатов записей, основываясь только на [Id] ... уникальных. Да, и значение [Group] в основном указывает на уровень важности, 1 = эти записи должны быть вставлены первыми, а 3 = эти записи должны быть вставлены последними, убедившись, что в целевой таблице нет других записей с таким же значением [Id] .
Ожидается, что данные будут вставлены:
1 One 01 1
2 Two 02 1
3 Three 03 1
4 Four 04 2
5 Five 05 2
6 Six 06 3
Я могу сделать это, сначала вставив [Group] = 1 записи в @ T1. Затем напишите еще одну вставку для [Group] = 2, где [Id] не существует, и так далее. Но я ищу эффективный способ. Я хочу сделать вставку эффективной.