Попробуйте, как это
DECLARE @mockup TABLE(UserId INT,AccountId INT,Title VARCHAR(10),FirstName VARCHAR(100),LastName VARCHAR(100));
INSERT INTO @mockup VALUES
(1234,1001,'Mr','John','Banks')
,(1235,1001,'Mrs','Georgia','Banks')
,(1236,1002,'Mr','Chris','Aims')
,(1237,1002,'Mrs','Caroline','Hole');
SELECT t1.AccountId
,STUFF((
SELECT ' & '
+ CONCAT(t2.Title + ' '
,LEFT(t2.FirstName,1) + ' '
,CASE WHEN LEAD(t2.LastName) OVER(ORDER BY t2.UserId)=t2.LastName THEN NULL ELSE t2.LastName END)
FROM @mockup t2
WHERE t2.AccountId=t1.AccountId
FOR XML PATH(''),TYPE
).value('.','nvarchar(max)'),1,3,'')
FROM @mockup t1
GROUP BY t1.AccountId;
Вы написали в комментарии о SQL-Server 2008. Это не допускает LEAD()
.Вы можете заменить строку на LEAD
этим
,CASE WHEN (SELECT TOP 1 LastName FROM @mockup t3 WHERE t3.AccountId =t1.AccountId AND t3.UserId>t2.UserId)=t2.LastName THEN NULL ELSE t2.LastName END)