Я думаю, что это может быть полезно:
;With partners as
(select [Opportunity ID], Name from accounts inner join OpttyPartner on
accounts.id=OpttyPartner.[ACCOUNTTOID]
inner join final2 on final2.[Opportunity ID] = OpttyPartner.id15)
Update final2 set partner = p.names from
final2 inner join
(select [Opportunity ID] , LEFT(Names, len(Names)-1) as Names from
(SELECT j.[Opportunity ID] ,
( SELECT cast(p1.Name as varchar(10)) + ';'
FROM partners p1
WHERE p1.[Opportunity ID] = j.[Opportunity ID]
ORDER BY Name
FOR XML PATH('') ) AS Names
FROM partners j
GROUP BY [Opportunity ID] )A
) p on final2.[Opportunity ID] = p.[Opportunity ID]
Попробуйте использовать это (при необходимости добавьте параметры сортировки), если у вас есть несколько записей в opptyPartner с одинаковым ID15 и ACCOUNTTOID:
;With partners as
(select [Opportunity ID], Name from accounts inner join (select distinct [ID15]
,[ACCOUNTTOID] from OpttyPartner) OpttyPartner on
accounts.id=OpttyPartner.[ACCOUNTTOID]
inner join final2 on final2.[Opportunity ID] = OpttyPartner.id15)
Update final2 set partner = p.names from
final2 inner join
(select [Opportunity ID] , LEFT(Names, len(Names)-1) as Names from
(SELECT j.[Opportunity ID] ,
( SELECT cast(p1.Name as varchar(10)) + ';'
FROM partners p1
WHERE p1.[Opportunity ID] = j.[Opportunity ID]
ORDER BY Name
FOR XML PATH('') ) AS Names
FROM partners j
GROUP BY [Opportunity ID] )A
) p on final2.[Opportunity ID] = p.[Opportunity ID]