У меня есть таблица с именем Availability, которая выглядит следующим образом.
| Id | Allocated | AverageCost | Demand | InStock | SourceDate | LocationId | ItemId
Теперь ItemId - это связь с таблицей Предметов, а LocationId - это связь с таблицей Местоположения, для каждого элемента может быть только 1 запись на местоположение.
У меня есть другая таблица с обновленной доступностью, но только для некоторых элементов, а не для всех, теперь я хочу объединить и вставить все, что отсутствует в цели, и обновить цель также, но моя проблема в том, что я делаю, когда, скажем, некоторые местоположения из определенных элементов были удалены, я хочу удалить, когда в источнике отсутствует ТОЛЬКО доступность для элементов, которые я сейчас сопоставляю,
вот пример. скажем, в источнике у меня есть несколько записей для ItemId 2356, теперь я хочу сопоставить их с целью только для записей, которые имеют itemId = 2356. поэтому, когда у меня в целевой записи 6 для ItemId 2356 и в источнике, у меня есть только 4 записи для этого ItemId я хочу, чтобы он удалил 2 записи из цели, которые отсутствуют в Source.
Target
ID A AC D IS Date LocationId ItemID
1 | 0 | 2.36 | 23 | 56 | 3/23/18 | 5689 | 2356
2 | 0 | 5.36 | 10 | 34 | 3/23/18 | 5634 | 2356
3 | 0 | 5.36 | 10 | 34 | 3/23/18 | 5756 | 1497
4 | 0 | 5.36 | 10 | 34 | 3/23/18 | 5371 | 2356
5 | 0 | 5.36 | 10 | 34 | 3/23/18 | 2873 | 2356
6 | 0 | 5.36 | 10 | 34 | 3/23/18 | 8549 | 2356
7 | 0 | 5.36 | 10 | 34 | 3/23/18 | 8549 | 3585
8 | 0 | 5.36 | 10 | 34 | 3/23/18 | 8549 | 2943
9 | 0 | 5.36 | 10 | 34 | 3/23/18 | 2958 | 2356
Источник
A AC D IS Date LocationId ItemID
0 | 2.36 | 23 | 56 | 3/23/18 | 5689 | 2356
0 | 5.36 | 10 | 34 | 3/23/18 | 5634 | 2356
0 | 5.36 | 10 | 34 | 3/23/18 | 2873 | 2356
0 | 5.36 | 10 | 34 | 3/23/18 | 8549 | 2356
но, к сожалению, мой текущий MERGE удаляет из цели все, что не найдено в источнике, включая записи с другим ItemId.
вот мое слияние.
MERGE Availability AS target
USING #tmpAvailability AS SOURCE
ON target.[locationId] = SOURCE.[locationId]
AND target.[ItemId] = Source.[ItemId]
WHEN MATCHED THEN
UPDATE SET TARGET.[Allocated] = source.[Allocated],
TARGET.[AverageCost] = source.[AverageCost],
TARGET.[Demand] = source.[Demand],
TARGET.[InStock] = source.[InStock],
TARGET.[SourceDate] = source.[SourceDate]
WHEN NOT MATCHED BY TARGET THEN
INSERT ([Allocated],[AverageCost],[Demand],[InStock],[SourceDate],[LocationId],[ItemId])
VALUES (SOURCE.[Allocated] ,SOURCE.[AverageCost],source.[Demand],source.[InStock],source.[SourceDate],source.[LocationId],source.[ItemId])
when Not Matched By Source and source.[ItemId] is not null then
DELETE;