Я знаю, что есть этот вопрос , но я думаю, что мой сценарий немного отличается ...
Итак, у меня есть представление vw_BindingDataCurrent
, и оно содержит BindingID
, CaseID
, набор других идентификаторов (PersonID
, OrganizationID
, ServiceID
и некоторые другие) и некоторые другие столбцы, содержащие данные, связанные с привязкой. Теперь существует уникальное ограничение на идентификаторы в вспомогательной таблице для представления, отличного от BindingID
, поэтому нельзя создать дублирующиеся строки, имеющие одинаковые значения для всех этих других идентификаторов.
Моя проблема в том, что я хотите найти в этом представлении строки, соответствующие одной из двух CaseID
s, и скопируйте их, предоставив им третью @CaseIDCharlie
. По сути, я объединяю данные для двух дел в один.
Вот код, иллюстрирующий ситуацию:
declare @merge table
(
id int
)
declare @binding table
(
id int identity,
caseid int,
personid int,
organizationid int,
serviceid int,
durationid int,
specialistid int,
noteid int,
dummy nvarchar(max)
)
insert into @binding
(caseid, personid, organizationid, serviceid, durationid, specialistid, noteid, dummy)
values
(1, 42, 42, 42, 42, 42, 42, 'overwrite me'), -- this should be overwritten
(1, 86, 42, 42, 42, 42, 42, 'good data'), -- this should appear
(2, 42, 42, 42, 42, 42, 42, 'good data'), -- this should appear
(3, 42, 42, 42, 42, 42, 42, 'wrong case') -- this is a different case ID, should not appear
-- copy bindings to new case
delete @merge
insert into @merge select id from @binding where CaseID in (1,2) -- need to filter out duplicates by the other IDs
select b.* from @merge m join @binding b on m.id = b.id
Я хочу, чтобы таблица @merge
содержала только идентификаторы. второй и третьей строк таблицы @binding
. Первая строка должна быть пропущена, поскольку она является дубликатом третьей строки, а четвертая строка должна быть пропущена, поскольку она связана с идентификатором дела № 3, который не является одним из двух идентификаторов дела, которые мы объединяем.
Или, другими словами, вы могли бы сказать это так: я хочу что-то вроде select distinct personid, organizationid, serviceid, durationid, specialistid, noteid from @binding
, но потом каким-то образом я бы также получил поля id
и dummy
из записи для случая 2, даже если они не совпадают между случаями 1 и 2 ...